0

問題

透明度を維持し、画像を中央に配置しながら、260x310pxのPNGを120x120pxにサイズ変更しようとしています。以下に使用している関数を含めました。画像の外観に関しては問題なく機能しますが、作成される画像はかなり大きくなります。実際、すべての画像は128kbのように見え(私がすべてを調べたわけではありませんが数千あります)、これらの画像の50,000のディレクトリは、画像が半分のサイズ(ピクセル単位)を超えているにもかかわらず、1GB大きくなっています。

これは、PHPがPhotoshopのように最適化を行っていないためだと思います。PHPで画像を最適化するためにできることはありますか?

コード

これは私のコードです:

if ($handle = opendir($mydir_path)) {
    while (false !== ($entry = readdir($handle))) {
        if(strpos($entry, '.png'))
        {
            resize($mydir_path.$entry);
        }
    }
    closedir($handle);
}

function resize($img_loc)
{
    $mini_loc = str_replace('megapack', 'handheld_megapack', $img_loc);

    $canvas = imagecreatetruecolor(310, 310);
    imagefill($canvas, 0, 0, imagecolorallocatealpha($canvas, 255, 255, 255, 127));
    imagealphablending($canvas, false);
    imagesavealpha($canvas, true);

    $img = imagecreatefrompng($img_loc);
    imagecopy($canvas, $img, 25, 0, 0, 0, 260, 310);

    $resizedImg = imagecreatetruecolor('120', '120');
    imagefill($resizedImg, 0, 0, imagecolorallocatealpha($resizedImg, 255, 255, 255, 127));
    imagealphablending($resizedImg, false);
    imagesavealpha($resizedImg, true);

    imagecopyresampled($resizedImg, $canvas, 0, 0, 0, 0, '120', '120', '310', '310');

    $dirname = dirname($mini_loc);

    imagepng($resizedImg, $mini_loc, '0');

    chmod($mini_loc, 0666);

    return $mini_loc;
}
4

1 に答える 1

1

PHPを使用してファイルを最適化することは可能かもしれませんが、pngcrushなどのプログラムを使用して実行するのが最も簡単です。

GDを使用すると、imagepng "quality"の3番目のパラメーターを使用して9に設定することができます(0 =圧縮なしに設定されています)が、専用のPNGオプティマイザーを使用するとさらに多くのことが得られます。

この質問もチェックしてください:PNG最適化ツール

于 2012-12-23T20:09:54.110 に答える