Magento resize () качество изображения: грязно-белый фон - PullRequest
9 голосов
/ 05 декабря 2011

У меня есть клиент, который серьезно недоволен тем, как его эскизы продуктов отображаются в Magento.

Изворотливый вид заметен на двух счетах:

  • есть грязный белый фон с очень светло-серыми горизонтальными линиями
  • и, во-вторых, очень незначительная потеря цвета (теряется контраст и насыщенность).

Я удалил ВСЕ сжатие, установил ВСЕ качество на 100%, очистил кэш изображений, экспериментировал, сломал и исправил все это десятки раз, и, похоже, ничего не работает.

Эта версия Magento является вер. 1.4.2.0

Кто-нибудь здесь испытывает те же проблемы, и если да, то вам удалось это исправить?

Ответы [ 7 ]

22 голосов
/ 06 декабря 2011

Проблема связана с функцией php imagecopyresampled в функции изменения размера в lib / Varien / Image / Adapter / Gd2.php, есть некоторые проблемы с округлением, которые возникают при создании плавно изменяемого размера изображения.

Мое решение состоит в том, чтобы просто изменить любые очень светло-серые пиксели изображения на чисто белый после изменения размера изображения.Для этого сначала скопируйте lib / Varien / Image / Adapter / Gd2.php в app / code / local / Varien / Image / Adapter / Gd2.php

Далее найдите следующий код внутри функции изменения размера (вокруг строки312)

// resample source image and copy it into new frame
imagecopyresampled(
    $newImage,
    $this->_imageHandler,
    $dstX, $dstY,
    $srcX, $srcY,
    $dstWidth, $dstHeight,
    $this->_imageSrcWidth, $this->_imageSrcHeight
);

Затем добавьте следующий код:

// Clean noise on white background images
if ($isTrueColor) {
    $colorWhite = imagecolorallocate($newImage,255,255,255);
    $processHeight = $dstHeight+$dstY;
    $processWidth = $dstWidth+$dstX;
    //Travel y axis
    for($y=$dstY; $y<($processHeight); ++$y){
        // Travel x axis
        for($x=$dstX; $x<($processWidth); ++$x){
            // Change pixel color
            $colorat=imagecolorat($newImage, $x, $y);
            $r = ($colorat >> 16) & 0xFF;
            $g = ($colorat >> 8) & 0xFF;
            $b = $colorat & 0xFF;
            if(($r==253 && $g == 253 && $b ==253) || ($r==254 && $g == 254 && $b ==254)) {
                imagesetpixel($newImage, $x, $y, $colorWhite);
            }
        }
    }
}

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

6 голосов
/ 09 сентября 2012

попробуйте следующий пример

echo Mage::helper('catalog/image')->init($product, 'small_image')->resize(180, 210)->setQuality(50);
3 голосов
/ 06 декабря 2011

Вы можете поместить свой собственный файл Gd2.php в локальный каталог (app / code / local / Varien / Image / Adapter / Gd2.php) и установить качество до 100%.

Качество работает для меня, поэтому я этого не делал.

Вы также можете поместить сверточное изображение, чтобы повысить резкость своих изображений, таким образом, вы получите размытие при изменении размера, компенсируемое резкостью, например. поместите следующее прямо в конец функции «изменить размер»:

    $sharpenMatrix = array(array(-1,-1,-1),array(-1,24,-1),array(-1,-1,-1));
    $divisor = 16;
    $offset = 0;
    imageconvolution($newImage, $sharpenMatrix, $divisor, $offset);
1 голос
/ 05 декабря 2011

У меня были проблемы с качеством изображения на одном из проектов. Но проблема была не в серверной части, а в интерфейсной. Изображения имели плохое качество, потому что ширина и высота изображений, указанные в CSS, были не такими, как у файла изображения.

0 голосов
/ 19 июня 2014

Загрузить изображения в формате PNG. Они могут быть не такими маленькими, как JPG, но это позволило нам избежать некоторых проблем с качеством изображения, создаваемых функцией изменения размера Magento.

0 голосов
/ 23 ноября 2012

У меня была такая же проблема с некоторыми из моих изображений, позже я понял, что эти изображения с более низким разрешением искажаются, попробуйте использовать изображение больше чем 1100 X 1100, и оно должно работать очень хорошо!

0 голосов
/ 05 декабря 2011

быстрая grep показывает, что вы можете установить это для объекта product_image

app/code/core/Mage/Catalog/Helper/Image.php:105:     * Set image quality, values in percentage from 0 to 100
app/code/core/Mage/Catalog/Helper/Image.php:107:     * @param int $quality
app/code/core/Mage/Catalog/Helper/Image.php:110:    public function setQuality($quality)
app/code/core/Mage/Catalog/Helper/Image.php:112:        $this->_getModel()->setQuality($quality);
app/code/core/Mage/Catalog/Model/Product/Image.php:38:    protected $_quality = 90;
app/code/core/Mage/Catalog/Model/Product/Image.php:88:     * Set image quality, values in percentage from 0 to 100
app/code/core/Mage/Catalog/Model/Product/Image.php:90:     * @param int $quality
app/code/core/Mage/Catalog/Model/Product/Image.php:93:    public function setQuality($quality)
app/code/core/Mage/Catalog/Model/Product/Image.php:95:        $this->_quality = $quality;
app/code/core/Mage/Catalog/Model/Product/Image.php:100:     * Get image quality
app/code/core/Mage/Catalog/Model/Product/Image.php:106:        return $this->_quality;
app/code/core/Mage/Catalog/Model/Product/Image.php:331:                'quality' . $this->_quality
app/code/core/Mage/Catalog/Model/Product/Image.php:387:        $this->_processor->quality($this->_quality);
...