16

Google Chrome で Page Speed を実行すると、画像の最適化/圧縮が提案されます。これらの画像は主にユーザーによってアップロードされるため、アップロード中に最適化する必要があります。PHPでJPEG画像を最適化することについて私が見つけたのは、次のGD関数を使用するようなものです:

getimagesize()
imagecreatefromjpeg()
imagejpeg()

アップロード後に画像のサイズを変更しているので、すでにこれらの関数を使用して画像を取得しており、さらにimagecopyresampled()afterを使用しimagecreatefromjpeg()てサイズを変更しています。

しかし、Page Speed は、これらの画像を最適化できることを示しています。PHPスクリプトでこの最適化を達成するにはどうすればよいですか? imagejpeg() で品質を低く設定しても違いはありません。

4

4 に答える 4

20

imagejpeg 関数は、品質を割り当てる場所です。すでに適切な値に設定している場合は、他にできることはほとんどありません。

ページ速度はおそらく、特定のサイズを超えるすべての画像を「圧縮が必要」であると見なします。おそらく、すべての画像が(高さ/幅に関して)妥当な範囲で小さく圧縮されていることを確認してください。

ページ速度の詳細については、pagespeed ドキュメントhttp://code.google.com/speed/page-speed/docs/payload.html#CompressImagesの圧縮に関する提案を参照してください。適切に圧縮するためのテクニックやツールがいくつか説明されています。

また、次の記事も読みました。

画質に影響を与えることなく、JPEG および PNG ファイルに対してさらに可逆圧縮を実行するツールがいくつかあります。JPEG の場合は、jpegtranまたはjpegoptimをお勧めします (Linux でのみ使用可能。 --strip-all オプションで実行)。PNG の場合は、OptiPNGまたはPNGOUTをお勧めします。

したがって、おそらく (本当に Google の提案に固執したい場合)、PHP を使用execして、アップロードされたファイルに対してこれらのツールの 1 つを実行できます。


PHPで圧縮するには、次のようにします(すでにこれを行っているように聞こえます):

$source_url画像はどこ$destination_urlにあり、 は保存する場所であり、$qualityは 1 から 100 までの数値で、使用する jpeg 圧縮の量を選択します。

function compressImage($source_url, $destination_url, $quality) {
    $info = getimagesize($source_url);

    if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($source_url);
    elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($source_url);
    elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($source_url);

    //save file
    imagejpeg($image, $destination_url, $quality);

    //return destination file
    return $destination_url;
}
于 2012-12-28T16:39:38.587 に答える