22

ユーザーがアップロードした画像を ImageMagick を使用してさまざまなサム形式にサイズ変更する PHP 写真共有アプリケーションがあります。

ファイルサイズを節約するための一見「賢い」方法として、次のようにこれらのサムからexif情報を削除しています。

$imagick = new Imagick($image);
$imagick->stripImage();
$imagick->writeImage($image);

これは機能します。EXIF 情報は削除されます。30 KB のサムが 12 KB 節約され、18 KB になります。このようなサムネイルを 1 つのページに多数表示すると、大幅な節約になります。

ただし、問題は、少しうまく機能しすぎることです。結果の画像は、ストリップされていないバージョンと比較して、多くの色情報が失われ、「フラット」に見えます。

これまでの調査に基づいて、私の理論では、次のいずれかまたは両方が正しいと考えています。

  • Imagick は、ストリッピング プロセスの一部として重要なカラー プロファイル情報を破棄します
  • Imagick は保存時に画像を再圧縮し、品質を低下させます

問題の原因に関係なく、画質や色自体に影響を与えないように EXIF 情報を削除する方法を探しています。

これは可能ですか?

アップデート:

Gerald Schneider の回答に基づいて、画像を「剥ぎ取る」前に、品質設定を 100% に強制しようとしました。

$imagick = new Imagick($image);
$imagick->setCompression(imagick::COMPRESSION_JPEG);
$imagick->setCompressionQuality(100);
$imagick->stripImage();
$imagick->writeImage($image);

残念ながら、問題は残っています。以下は、品質を 100% に設定しているにもかかわらず、画像がまだ平坦化されている出力例です。

ここに画像の説明を入力

4

3 に答える 3

1

誤って保存されたファイル ヘッダーの MIME タイプに同様の変更を加えたので、標準ツールを使用して EXIF データの長さを確認し、マルチバイト文字列関数を使用してデータを手動で「ゼロ」にすることをお勧めします。

EXIF は JPEG ファイルで最大 64KB しかありませんが、正確に 64KB であるかどうか確信が持てないので、これから始めます。

于 2012-12-13T22:12:09.090 に答える