9

製品のサムネイルが Magento でレンダリングされる方法に非常に不満を持っているクライアントがいます。

危険な外観は、次の 2 つの理由で顕著です。

  • 非常に薄い灰色の水平線が入った汚れた白い背景があります
  • 第二に、非常にわずかな色の損失があります (コントラストと彩度が失われます)。

すべての圧縮を削除し、すべての品質を 100% に設定し、イメージ キャッシュをフラッシュし、実験し、壊れて、何十回も修正しましたが、何も機能していないようです。

このバージョンの Magento は ver. 1.4.2.0

同じ問題を経験している人はいますか?

4

7 に答える 7

22

この問題は、lib/Varien/Image/Adapter/Gd2.php 内のサイズ変更関数に含まれる php 関数 imagecopyresampled に関係しています。スムーズにサイズ変更された画像を作成するために発生する丸めの問題がいくつかあります。

私の解決策は、画像のサイズを変更した後、画像内の非常に明るい灰色のピクセルを純粋な白に変更することです。これを行うには、まず 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 のキャッシュ管理から画像キャッシュをフラッシュすると、新しいディスプレイ用のより良い画像が得られるはずです。これを実装する際に注意すべきことはほとんどありません。最初に画像を再生成するときにパフォーマンスがわずかに低下します。また、非常に明るいグレーが削除されているため、影のある画像のエッジがよりシャープになる場合があります。

于 2011-12-06T09:23:13.393 に答える
6

次の例を試してください

echo Mage::helper('catalog/image')->init($product, 'small_image')->resize(180, 210)->setQuality(50);
于 2012-09-09T18:52:30.943 に答える
3

独自の 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);
于 2011-12-06T14:27:55.830 に答える
1

あるプロジェクトで画質に問題がありました。しかし、問題はバックエンドではなく、フロントエンドにありました。CSS で指定された画像の幅と高さが画像ファイルと同じではなかったため、画像の品質が低下していました。

于 2011-12-05T12:56:50.990 に答える
0

一部の画像で同じ問題が発生しましたが、後で解像度の低い画像が歪んでいることに気付きました。1100 X 1100 を超える画像を使用してみてください。問題なく動作するはずです。

于 2012-11-23T10:38:12.287 に答える
0

クイック 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);
于 2011-12-05T13:05:17.800 に答える
-1

画像を PNG としてアップロードします。JPG ほど小さくはないかもしれませんが、Magento のサイズ変更機能によって生じる画質の問題を回避することができました。

于 2014-06-19T17:17:24.913 に答える