Magento - 从自动缩略图中删除黑色背景?

时间:2009-11-25 12:19:34

标签: php magento

在Magento网站上,我只是为每个产品上传一张图片,并将其用作基本的小图片和缩略图。但是,我的图片不是正方形,所以我在创建的缩略图中添加了黑色背景。任何想法如何改变为白色背景?

http://www.magentocommerce.com/?ACT=25&fid=10&aid=10785_osKeOnfKFLFvgqVYbr0j&board_id=1

我已经搜索过这个,但在任何地方找不到合适的答案......

4 个答案:

答案 0 :(得分:3)

我找到了解决方法。副作用是用于图像调整大小的类将用白色(甚至是透明的)填充所有图像,但这并不会影响Magento,因为它无论如何都不使用透明填充。所以要解决这个问题:

  1. 转到magento文件夹中的lib\Varien\Image\Adapter\Gd2.php
  2. 找到这一行

    $this->_fillBackgroundColor($newImage);
    

    并将其替换为此行

    $this->_fillBackgroundColor($newImage,$frameWidth,$frameWidth);
    
  3. 找到这一行

    private function _fillBackgroundColor(&$imageResourceTo)
    

    并将其替换为

    private function _fillBackgroundColor(&$imageResourceTo,$w,$h)
    
  4. 找到此代码

    if (!imagefill($imageResourceTo, 0, 0, $color)) {
        throw new Exception("Failed to fill image background with color {$r} {$g} {$b}.");
    }
    

    并将其替换为

    imagefilledrectangle($imageResourceTo,0,0,$w,$h,$color);
    
  5. 就是这样。问题来自Gd2中的PHP函数imagefill,而不是某些setings。这是使用imagefilledrectangle的解决方法,并为我工作。希望它也能解决你的问题。

答案 1 :(得分:3)

来自Adi's answer的第4点的更正:

4。找到这个代码

if (!imagefill($imageResourceTo, 0, 0, $color)) { throw new Exception("Failed to fill image background with color {$r} {$g} {$b}."); }

并将其替换为:

if (!imagefilledrectangle($imageResourceTo,0,0,$w,$h,$color)) {
    throw new Exception("Failed to fill image background with color {$r} {$g} {$b}.");

答案 2 :(得分:2)

Magento中使用的Varien_Image提供了设置缩放图像的背景颜色的可能性。在输出图像(调整大小方法?)以使背景变白之前,您可以在某处使用类似的代码:

$image->backgroundColor(array(255, 255, 255));

答案 3 :(得分:0)

Adi的回答让我朝着正确的方向前进,但我的图像上仍然有一条黑线。我发现当裁剪图像时,Magento会创建一个画布背景,然后在它上面创建图像。画布在我的图像上产生黑线。

我设法通过添加Adi的更改来修复它,然后另外,在crop()函数中(在同一个文件中),我添加了:

list($r, $g, $b) = $this->_backgroundColor;
$bg_color = imagecolorallocate($canvas, $r, $g, $b);
imagefill($canvas, 0, 0, $bg_color);

在功能之后(第554行,在adi更改之后):

imagecopyresampled

现在我的图片有他们应该拥有的背景颜色!

另外需要注意的是,不应直接在核心中编辑此文件,而应将其复制到:

app/code/local/Varien/Image/Adapter/Gd2.php

希望这可以帮助有人解决同样的问题。