1

私はphpで画像共有ウェブサイトを作っています。私はグーグルのページスピードについて読んでいて、彼らは私が私の画像を最適化する必要があると言ったので、私はimagejpegでそれをしようとしていました、そしてうまくいけば私はpngとgifで基本的に同じコードを使うことができるでしょう。

これは私が現在持っているコードです:

$img = imagecreatefromjpeg($original);

if ($extension === "jpg" || $extension === "jpeg"){
    $location = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $id . "/fullsize." . $extension;
    $temp = fopen($location, 'w');
    imagejpeg($img, $location, 80);
    fclose($temp);
}

そして、$ originalで画像を取得し、imagejpegを介して取得したコピーを$locationに保存する役割を果たします。

ただし、結果のファイルが元のファイルよりも大きい場合があります。これは私が困惑するところです。

なぜこうなった?

どうすればそれが起こらないようにすることができますか?

見た目を損なうことなく画像ファイルのサイズを縮小しようとしていますが、これよりも良い方法はありますか?

ありがとう、

リアム

4

2 に答える 2

0

imagejpegは、元のファイルよりも低い品質設定でファイルを保存した場合にのみファイルを縮小します

例えば

imagejpeg($gd, 'temp.jpg', 50);
$temp = imagecreatefromjpeg('temp.jpg');
imagejpeg($gd, 'temp2.jpg', 70);

より高品質の設定であるため、おそらくより大きなtemp2ファイルが生成されます。これは大まかに「あまり圧縮しない」という意味になります。

jpeg圧縮プロセス全体を実際に実行せずに、特定の画像と品質設定の最終的な出力サイズを予測する方法はありません。画像を数回再圧縮し、収縮が始まるまで毎回品質設定を下げる必要がある場合があります。

もちろん、品質を低くしすぎると、基本的に画像がゴミ箱に捨てられ、目に見えるアーティファクトが確実に導入されます。

于 2012-09-27T03:41:54.603 に答える
0

それは間違いなく元の画像の品質に依存します。画像が元々品質60の場合、品質80で保存すると、通常、ファイルサイズが大きくなります。

ただし、元のイメージを作成したソフトウェアによっても異なります。たとえば、Adobe PhotoshopがGD(使用しているグラフィックライブラリ)から80程度の品質で画像を保存できることを何度も観察しました。また、Photoshopは、多くの場合、別のグラフィックパッケージと同じ品質で、サイズが小さい画像を保存できます。もちろん、これは主観的なものです。私は必ずしもPhotoshopが「より良い」と結論付けているわけではありませんが、オプションが適切に調整されているように見えます。

ImageMagickは、一般的にGDよりも優れた仕事(ファイルサイズ、画質)を発揮するので、ぜひ試してみることをお勧めします。また、誤って画像を拡大しないように、画像ごとに元の品質設定を決定する必要があります。

于 2012-09-27T04:30:09.333 に答える