0

画像のサイズ変更に問題があります。

指定されたパラメータより大きいファイルをアップロードすると、画像がトリミングされ、100% の品質で保存されます。

したがって、272Kb の大きな jpeg をアップロードするとします。画像は奇数 100 ピクセル分トリミングされます。ファイルサイズは最大 1.2Mb になります。

100% の品質で画像を保存しています。これが問題の原因だと思います。画像は Photoshop から 30% の品質でエクスポートされ、ファイル サイズが縮小されます。画像を 100% の品質で再保存すると同じ画像が作成されますが、多くの冗長なファイル データが含まれていると思います。

誰もこれに遭遇したことがありますか?誰にも解決策がありますか?

これが私たちが使用しているものです。

$source_im = imagecreatefromjpeg ($file);
$dest_im = imagecreatetruecolor ($newsize_x, $newsize_y);
imagecopyresampled (
    $dest_im, $source_im,
    0, 0,
    $offset_x, $offset_y,
    $newsize_x, $newsize_y,
    $sourceWidth, $sourceHeight
);

imagedestroy ($source_im);
if ($greyscale) {
    $dest_im = $this->imageconvertgreyscale ($dest_im);
}
imagejpeg($dest_im, $save_to_file, $quality);
break;
4

3 に答える 3

5

30% で保存してから 100% で再保存すると、あなたが言うように、トリミング、サイズ変更などに関係なく、冗長なデータが作成されます。

残念ながら、JPEG 圧縮はデータの損失を蓄積するため、30% で圧縮し、画像を処理してから再圧縮すると、常に元の圧縮よりも悪くなります。経験則として、圧縮 (特に 30% のような重い圧縮) はプロセスのできるだけ後半まで避けることです。したがって、100% (または必要に応じて 80%) でアップロードしてから圧縮します。

編集:どうやら、jpegtran (google it) は、画像サイズが特定の制約 (通常は幅と高さが 16 ピクセルの倍数) に従っている限り、最初に画像を解凍せずにトリミングなどの操作を実行できます。自分で試したことはありませんが、目的に合うかもしれません。

于 2011-01-03T14:56:29.157 に答える
2

JPEG を 30% 品質で保存すると、多くのピクセル情報が保存されません。gd を使用して再度開くと、鮮明な新しいピクセルで新しい画像が作成されます。これらがあなたにとって良いか悪いか (画像が最初に保存されたときの品質による) は関係ありません。この新しい画像を保存すると、新しい JPEG ファイルが作成されます。品質を 100% に設定すると、基本的にすべてのピクセルが節約されますが、もちろん多くのスペースが必要になります。(私は一般化していますが、お分かりいただけると思います。) 元の画像がどのような品質設定で保存されていても関係ありません。大きな画像を 100% の品質で保存すると、多くの容量が必要になります。

唯一の解決策は、より低い品質設定を使用して画像を保存することです。通常、約 70% は完全と事実上区別がつきませんが、多くのバイトを節約できます。ロスレスですが、より良い圧縮率を提供する (または提供しない可能性がある) PNG を試すこともできます。

于 2011-01-03T14:55:25.163 に答える
0

あなたの仮定は正しいです。本質的にロスレスで保存しています。私はビデオエンコーディングでこれに遭遇しました.解像度を小さくしてロスレスに上げると、最終的なサイズは元の2倍になりました. 画像が十分に小さい場合は、適切なパレット ベースの画像タイプまたは jpeg ではなくネイティブ ロスレスのタイプを使用して保存します。50〜70%の品質で保存し、jpegに得意なことをさせます。

于 2011-01-03T14:51:16.463 に答える