1. ホーム
  2. image-processing

[解決済み] JPEGの品質レベルを知ることは可能ですか?

2023-06-05 12:14:19

質問

私はまだこのようなものの仕組みを完全に理解しているわけではないので、これは本当に2つの部分からなる質問です。

私の状況。私は、ユーザーが画像をアップロードできるようにする Web アプリケーションを書いています。私のアプリは、表示可能なサイズ (たとえば、640x480 程度) にリサイズし、後で使用するためにファイルを保存します。

私の質問です。

  1. 任意の JPEG ファイルがある場合、品質レベルが何であるかを知ることは可能でしょうか。
  2. これは重要なことでしょうか? 元の品質に関係なく、すべての画像を適切なレベル (例: 75 ~ 80) で保存する必要がありますか?

私が考えるに、これについてはあまり自信がありません。(極端な例ですが) 誰かが 5 メガピクセルの画像を品質 0 で保存したとしたら、それは何もかもブロック状になってしまうでしょう。画像サイズを640x480に縮小すると、そのブロック性は滑らかになり <ストライク かろうじて 再び品質 0 で保存するまでは......。

一方、800x600 で q=0 の画像があった場合、640x480 にリサイズしても、それがまったくゴミのように見えるという事実は変わらないので、q=80 で保存することは冗長となります。

私はもっと近くにいるのでしょうか?

私は PHP で GD2 ライブラリを使用しています。

どのように解決するのですか?

  1. JPEG は非可逆なフォーマットです。 JPEG の同じ画像を保存するたびに、品質レベルに関係なく、実際の画像品質が低下します。 したがって、ファイルから品質レベルを取得できたとしても、JPEG を再度保存したときにその品質を維持することはできません (品質=100 であっても)。

  2. ファイル サイズの点で余裕がある限り、できるだけ高い品質で JPEG を保存する必要があります。 または、PNG のようなロスレス形式を使用します。

低品質の JPEG ファイルは、単純にブロック化されるわけではありません。 代わりに、色深度が減少し、画像の一部の詳細が削除されます。 低品質の画像がブロック状で、小さいサイズでも大丈夫なように見えるというのは、当てにならないことです。

によると JFIF 仕様によると によると、水平および垂直方向の画素密度は格納されていますが、画質番号 (0 ~ 100) は画像ヘッダに格納されません。