我终于在几个大驼峰之后整理了我的网站。我的图像大小调整有问题。
控制图像尺寸的代码如下:
'image' => $this->model_tool_image->resize($option_value['image'], 285, 85),
这使得所有图像都是285 x 85。
我的问题是,在自定义页面上,我有6x1选项,3x另一个,依此类推。因此,我需要图像具有不同的尺寸,最好在重新加载后保持它们的比例(尽管图像在现实中更大 - 即855x255)。
我尝试过$ auto,max_width = 100%(代替285/85)等等,但没有效果。
我想选项大小的控制将来自样式表,但对于我的生活,经过4个小时的搜索,我找不到一种方法来摆脱这些代码并让它按照我的意愿工作。
我想不出另一种方法来修改样式表以外的图像大小,到目前为止,与“auto”(大小)的任何关系都是多余的!
在建议之前,资金是绝对0.因此,我无法购买扩展/模块等等。我提前道歉
进一步补充:此代码:
'image' => $this->model_tool_image->resize($option_value['image'], $width == $auto, $height == $auto),
将图像恢复到原始大小,但出现错误:
“注意:未定义的变量:第373行的C:\ xampp \ htdocs \ OC \ vqmod \ vqcache \ vq2-catalog_controller_product_product.php中的宽度”
以上代码行(使用$ 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中提到的'default'根本无法访问!
帮我Stackoverflow,你是我唯一的希望
答案 0 :(得分:1)
这个线程解决了这个问题:
Remove the image resize ratio in OpenCart
我只是将“max”元素设置为1000,并通过CSS控制包含选项的元素,即max-width 330px,并根据需要调整所有图像的大小。
答案 1 :(得分:0)
OpenCart使用缓存来存储所有不同大小的图像,但不使用样式表,因此在自定义页面中只需使用该功能创建新图像,同时保持比率。
$new_image = $this->model_tool_image->resize($option_value['image'], 855, 255);
查看ModelToolImage类(前面的>>工具)和Image(库)以了解这些函数的作用。
更新:
看到你的更新,你不能这样做。
'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)
答案 2 :(得分:0)
我试图添加此问题opencart master分支,但它不被接受。此(https://gist.github.com/hkulekci/4503178)补丁是根据宽度或高度的图像比例。
在此修补程序中,有管理员设置,目录调整大小功能更新和所有图像调整大小功能更新。如果你不明白,你可以提出任何问题。
编辑:
这个补丁有两个部分。第一个是admin,第二个是目录。你不需要做管理部分。您只应更改目录部件。在目录部分中,首先,您应该更改/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");