0

经过几个大的驼峰,我终于开始整理我的网站。我在调整图像大小时遇到​​问题。

控制图像大小的代码如下:

'image' => $this->model_tool_image->resize($option_value['image'], 285, 85),

这使得所有图像都是 285 x 85。

我的问题是在自定义页面上我有 6x1 选项,3x 另一个等等。因此,我需要图像具有不同的大小,最好在重新加载后保持它们的比例(尽管图像实际上更大 - 即 855x255)。

我试过 $auto, max_width=100% (代替 285/85)等等,但没有效果。

我猜选项大小的控制将来自样式表,但是对于我的一生,经过 4 个小时的搜索,我找不到摆脱这段代码并让它按我希望的方式工作的方法。

除了样式表之外,我想不出另一种修改图像大小的方法,到目前为止,与“自动”(大小)的任何关系都是多余的!

在建议之前,资金绝对是 0。因此,我无法购买扩展程序/模组等。我提前道歉

进一步补充:此代码:

'image' => $this->model_tool_image->resize($option_value['image'], $width == $auto, $height == $auto),

将图像恢复到原始大小,但出现错误:

“注意:未定义的变量:C:\xampp\htdocs\OC\vqmod\vqcache\vq2-catalog_controller_product_product.php 中的宽度在第 373 行”

这是上面的代码行(带有$auto)。

那么,我可以添加到我的图像控制器或其他东西,以允许对许多不同大小的图像进行多次调整,以提供一半大小的图像?

这是我正在尝试做的事情(以图像形式)

http://imageshack.us/photo/my-images/152/optionsimages.png/

第二次编辑:

我已经玩了 3 天,并搜索了所有已知资源。为了帮助起见,这是代码:system/library/image.php

/**
*
*   @param width 
*   @param height
*   @param default char [default, w, h]
*                  default = scale with white space, 
*                  w = fill according to width, 
*                  h = fill according to height
*   
*/
public function resize($width = 0, $height = 0, $default = '') {
    if (!$this->info['width'] || !$this->info['height']) {
        return;
    }

    $xpos = 0;
    $ypos = 0;
    $scale = 1;

    $scale_w = $width / $this->info['width'];
    $scale_h = $height / $this->info['height'];

    if ($default == 'w') {
        $scale = $scale_w;
    } elseif ($default == 'h'){
        $scale = $scale_h;
    } else {
        $scale = min($scale_w, $scale_h);
    }

    if ($scale == 1 && $scale_h == $scale_w && $this->info['mime'] != 'image/png') {
        return;
    }

    $new_width = (int)($this->info['width'] * $scale);
    $new_height = (int)($this->info['height'] * $scale);            
    $xpos = (int)(($width - $new_width) / 2);
    $ypos = (int)(($height - $new_height) / 2);

    $image_old = $this->image;
    $this->image = imagecreatetruecolor($width, $height);

    if (isset($this->info['mime']) && $this->info['mime'] == 'image/png') {     
        imagealphablending($this->image, false);
        imagesavealpha($this->image, true);
        $background = imagecolorallocatealpha($this->image, 255, 255, 255, 127);
        imagecolortransparent($this->image, $background);
    } else {
        $background = imagecolorallocate($this->image, 255, 255, 255);
    }

    imagefilledrectangle($this->image, 0, 0, $width, $height, $background);

    imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width,     $new_height, $this->info['width'], $this->info['height']);
    imagedestroy($image_old);

    $this->info['width']  = $width;
    $this->info['height'] = $height;
}

由于某种原因,@param 中提到的“默认”根本无法访问!

帮助我 Stackoverflow,你是我唯一的希望

4

3 回答 3

1

这个问题已经解决了:

删除 OpenCart 中的图像调整比例

我简单地将“max”元素设置为 1000,并通过 CSS 控制包含选项的元素,即 max-width 330px,并根据需要调整所有图像的大小。

于 2013-03-09T22:24:28.760 回答
0

OpenCart 使用缓存来存储所有不同大小的图像,不使用样式表,因此在您的自定义页面中,只需使用该功能创建新图像,该功能也保持比例。

$new_image = $this->model_tool_image->resize($option_value['image'], 855, 255);

查看 ModelToolImage (front>>tool) 和 Image (library) 类,了解这些函数的作用。

更新:

看到你的更新,你不能这样做。

'image' => $this->model_tool_image->resize($option_value['image'], $width == $auto, $height == $auto),

您必须定义尺寸。举个小例子:

$sizes = array(
    '1' => array('w' => 255, 'h' => 85),
    '2' => array('w' => 200, 'h' => 200),
    '3' => array('w' => 350, 'h' => 150),
)

$images = array();

foreach ($sizes as $key => $size)
{
    $images[$key] = $this->model_tool_image->resize($option_value['image'], $size['w'], $size['h']);
}

从这里你有一个数组 ($images) 填充了所有调整大小的图像,你可以使用它来填充模板 (.tpl)

于 2013-03-09T00:24:34.667 回答
0

我试图添加这个问题 opencart master 分支,但没有被接受。这个(https://gist.github.com/hkulekci/4503178)补丁是根据宽度或高度对图像进行比率。

在这个补丁中,有管理员设置、目录调整大小功能更新和所有图像调整大小功能更新。如果你不明白,你可以问任何东西。

编辑 :

这个补丁有两个部分。第一个是管理员,第二个是目录。你不需要做管理部分。您应该只更改目录部分。在目录部分,首先,您应该更改/upload/catalog/model/tool/image.php/upload/system/library/image.php文件如下(https://gist.github.com/hkulekci/4503178#file-my4-patch-L14)(https://gist.github.com/hkulekci/4503178 #file-my4-patch-L50)

// '/upload/catalog/model/tool/image.php' file changes

// Find this line 
public function resize($filename, $width, $height) {

// Change it this
public function resize($filename, $width, $height, $type = "") {


// Find this
$new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;

// Change this 
$new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . $type .'.' . $extension;


// Find this 
$image->resize($width, $height);

// Change this 
$image->resize($width, $height, $type);


// '/upload/system/library/image.php' file changes

// Find this 
public function resize($width = 0, $height = 0) {

// Change this 
public function resize($width = 0, $height = 0, $type = "") {


// Find these lines 
$scale = min($scale_w, $scale_h);
if ($scale == 1 && $scale_h == $scale_w && $this->info['mime'] != 'image/png') {

// CHange these lines 
$scale = 1;
if ($type == "w"){
    $scale = $scale_w;
}else if ($type == "h"){
    $scale = $scale_h;
}else{
    $scale = min($scale_w, $scale_h);
}
if ( $scale == 1 && $scale_h == $scale_w && $this->info['mime'] != 'image/png' ) {
    return;
}

示例用法:(https://gist.github.com/hkulekci/4503178#file-my1-patch-L347

// At the end : 
// Comment for resize function 
/**
*
* @param width
* @param height
* @param type char [default, w, h]
* default = scale with white space,
* w = fill according to width,
* h = fill according to height
*
*/
$image = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_wishlist_width'), $this->config->get('config_image_wishlist_height'), "w");
于 2013-03-09T17:11:34.323 回答