2009-11-25 2 views
2

На сайте Magento я просто загружаю одно изображение для каждого продукта и использую его как базовые, мелкие и уменьшенные изображения. Тем не менее, мои фотографии не квадратные, поэтому я получаю черный фон, добавленный к создаваемому миниатюре. Любые идеи, как изменить это на белом фоне?Magento - Удаление черного фона из автоматических миниатюр?

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

Я искал для этого, но не может найти достойный ответ где-нибудь ...

ответ

3

Я нашел обходной путь для этого. Побочным эффектом является то, что класс, используемый для изменения размера изображения, заполняет все изображения белыми (даже прозрачными), но это не влияет на Magento, так как в любом случае он не использует прозрачную заливку. Таким образом, чтобы решить этот вопрос сделать это:

  1. Перейти к lib\Varien\Image\Adapter\Gd2.php в вашей Magento папке
  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); 
    

То есть это. Проблема возникает из функции PHP imagefill в Gd2, не работающей над некоторыми настройками. Это обходной путь с использованием imagefilledrectangle и работал для меня. Надеюсь, он решает и вашу проблему.

+0

Прохладный, я дам этот снимок. Я обошел его сам, используя изображения в качестве фона , которые я вставил вместо вставленных изображений

3

Коррекция на точку 4 из Adi's answer:

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

Varien_Image, который используется в Magento предлагает возможность установить цвет фона масштабированного изображения. Вы можете использовать подобный код где-то перед выводом изображения (размер метода?), Чтобы сделать фон белым: ответ

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

Ади привел меня в правильном направлении, но я все еще получаю черные линии на моих изображениях. Я обнаружил, что когда изображение обрезано, Magento создает фон холста, а затем изображение поверх него. Холст создавал черную линию на моих изображениях.

мне удалось это исправить, добавив изменения ADI, а затем дополнительно, в зависимости урожая() (в том же файле), я добавил:

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 

Надеется, что это помогает кто-то борется с той же проблемой.

Смежные вопросы