JPEGの品質レベルを伝えることは可能ですか?
-
19-09-2019 - |
質問
これは本当に2つの部分の質問です。なぜなら、これらのことがまだどのように機能するかを完全には理解していないからです。
私の状況:ユーザーが画像をアップロードできるWebアプリを書いています。私のアプリは、表示可能なもの(例:640x480-ish)にサイズを変更し、後で使用するためにファイルを保存します。
私の質問:
- 任意のJPEGファイルを考えると、サイズの画像を保存するときに同じ品質を使用できるように、品質レベルが何であるかを伝えることは可能ですか?
- これも重要ですか?元の品質に関係なく、すべての画像を適切なレベル(例:75-80)で保存する必要がありますか?
私はこれについてよくわかりません。なぜなら、私がそれを理解しているように、(極端な例を取りましょう)、誰かが5メガピクセルの画像を品質0で保存していた場合、それは何でもブロック状になるでしょう。画像サイズを640x480に削減すると、ブロッキネスが滑らかになり、 かろうじて あまり目立たない...もう一度品質0で保存するまで...
スペクトルのもう一方の端では、q = 0の800x600の画像がある場合、640x480にサイズ変更することは、完全ながらくたのように見えるという事実を変えることはないため、q = 80で保存することは冗長です。
私も近いですか?
PHPでGD2ライブラリを使用しています。
解決
JPEGは損失のある形式です。 JPEG同じ画像を保存するたびに、品質レベルに関係なく、実際の画質を低下させます。したがって、ファイルから品質レベルを取得したとしても、JPEGを再度保存すると同じ品質を維持できませんでした(品質= 100でも)。
JPEGは、ファイルサイズに関してできる限り高品質に保存する必要があります。または、PNGなどの損失のない形式を使用します。
低品質のJPEGファイルは、単にブロック状になるわけではありません。代わりに、色の深さが減少し、画像のセクションの詳細が削除されます。より低い品質の画像がブロック状態であり、サイズが小さいことで大丈夫に見えることに頼ることはできません。
による JFIF仕様。 品質数(0-100)は画像ヘッダーに保存されませんが、水平および垂直のピクセル密度は保存されます。
他のヒント
特定のJPEGの品質をチェックする将来の訪問者の場合、ImageMagickツールを使用することができます。
$> identify -format '%Q' filename.jpg
92%
JPEG圧縮アルゴリズムには、結果画像の品質に影響するいくつかのパラメーターがあります。
このようなパラメーターの1つは、各係数で使用されるビット数を定義する量子化テーブルです。さまざまなプログラムでは、異なる質問テーブルを使用します。
一部のプログラムにより、ユーザーは品質レベル0-100を設定できます。しかし、この数字の一般的な防御はありません。 60%の品質のPhotoshopで作られた画像には46 kbがかかりますが、Gimpで作られた画像には26 kbしかかかりません。
量子化テーブルも異なります。
サブサンプリング、DCTメソッドなどの他のパラメーターがあります。
したがって、それらすべてを単一の品質レベル番号で説明することはできず、JPEG画像の品質を単一の数字で比較することはできません。ただし、PhotoshopやGimpのような数字を作成して、品質のサイズ間のRemromissを説明できます。
詳しくは:http://patrakov.blogspot.com/2008/12/jpeg-quality-is-meaninglessnumber.html
一般的な慣行は、画像を適切なサイズにサイズ変更し、その後JPEGを適用することです。この場合、巨大な画像と中央の画像は同じサイズと品質を持ちます。
すでに2つの回答を使用しているためです identify
, 、ここにあります また、ファイル名を出力します(複数のファイルを一度にスキャンするため):
の簡単な出力が必要な場合 filename: quality
複数の画像で使用するには、使用できます
identify -format '%f: %Q' *
に ファイル名 +圧縮を表示します 現在のディレクトリ内のすべてのファイルの。
したがって、基本的にあなたが気にする2つのケースがあります:
入ってくる画像の高品質が高すぎると、不適切なスペースを占める可能性があります。したがって、たとえば、着信q = 99をq = 85に減らすことを望むかもしれません。
入ってくる画像の品質が低すぎると、品質を向上させるのはスペースの無駄かもしれません。大量のデータが破棄された画像が品質を上げたときに魔法のようにスペースを占有することはありません。ブロック状の画像は、高品質の設定でも非常にうまく圧縮されます。したがって、私の意見では、着信Q = 1をQ = 85に上げても大丈夫です。
これから、まともな品質を強制することは、完全に受け入れられることだと思います。
これが私がうまく機能することがわかったフォーミュラです:
jpg100size(98-100%の品質でバイトを超えてはならないサイズ)= width*height/1.7
jpgxsize = jpg100size*x(x =パーセント、例えば0.65)
したがって、これらを使用して、JPGが最後に保存された品質を統計的に調べることができます。 65%の品質としようとしたい場合は、再サンプリングを避けたい場合は、最初にサイズを比較して、まだ低すぎないことを確認し、品質を低下させるだけです。
ファイルの新しい保存はすべて、より高い品質の値を使用することにより、より多くの画像を維持することにより、全体的な品質をさらに低下させます。元の画質に関係なく。
同じ設定を使用して元々作成したのと同じソフトウェアを使用してJPEGを再配置すると、ダメージが最小限に抑えられることがわかります。アルゴリズムは、最初に捨てられたのと同じ情報を捨てる傾向があります。ファイルを見るだけで選択されたレベルを知る方法はないと思います。たとえ可能であっても、異なるソフトウェアは異なるパラメーターと丸めをほぼ保証し、試合をほとんど不可能にします。
これはばかげた質問かもしれませんが、なぜドキュメントの品質をマイクロ管理することを心配するのでしょうか? ImageMagickを使用して変換を行うと、JPEGの品質を管理するための最良の効果を管理すると思います。 http://www.php.net/manual/en/intro.imagick.php