web-dev-qa-db-ja.com

JPEGの品質レベルを伝えることは可能ですか?

これは実際には2つの部分からなる質問です。これらのことがどのように機能するのかまだ完全には理解していないからです。

私の状況:ユーザーが画像をアップロードできるWebアプリを作成しています。その後、アプリは表示可能なサイズ(例:640x480-ish)にサイズを変更し、後で使用するためにファイルを保存します。

私の質問:

  1. 任意のJPEGファイルがある場合、サイズ変更された画像を保存するときに同じ品質を使用できるように、品質レベルが何であるかを伝えることは可能ですか?
  2. これも重要ですか??元の品質に関係なく、すべての画像を適切なレベル(例:75〜80)で保存する必要がありますか?

私が考えているように、これについてはよくわかりません:(極端な例を見てみましょう)、品質0で保存された5メガピクセルの画像がある場合、それは何でもブロック状になります。画像サイズを640x480に縮小すると、ブロックノイズが滑らかになり、 かろうじて あまり目立ちません...再び品質0で保存するまで...

スペクトルのもう一方の端で、q = 0で800x600の画像があった場合、640x480にサイズ変更してもまったくのがらくたのように見えるという事実は変わらないので、q = 80で保存すると冗長になります。

私も近いですか?

Gd2ライブラリをPHP使用する場合で使用しています

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

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

低品質のJPEGファイルは、単にブロック状になるだけではありません。代わりに、色深度が削減され、画像のセクションの詳細が削除されます。低品質の画像がブロック状になっていて、小さいサイズでも大丈夫に見えることに頼ることはできません。

JFIF spec。 によれば、品質番号(0-100)は画像ヘッダーに保存されませんが、水平および垂直ピクセル密度は保存されます。

27
Ash

ImageMagickで圧縮レベルを表示できます。ダウンロードとインストールの手順は、 公式Webサイト にあります。

インストールした後、コマンドラインから次のコマンドを実行します。

identify -format '%Q' yourimage.jpg

そして、0(低品質、小さなファイルサイズ)から100(高品質、大きなファイルサイズ)の値を取得する必要があります。

情報源

95
DuyLuc

特定のjpegの品質を確認する将来の訪問者には、imagemagickツールを使用できます。

$> identify -format '%Q' filename.jpg
   92%
11
JAR.JAR.beans

Jpeg圧縮アルゴリズムには、結果画像の品質に影響を与えるいくつかのパラメーターがあります。

そのようなパラメーターの1つは、各係数で使用されるビット数を定義する量子化テーブルです。異なるプログラムは異なる量子化テーブルを使用します。

一部のプログラムでは、ユーザーが品質レベル0〜100を設定できます。しかし、この数字の一般的な定義はありません。 Photoshopで60%の品質で作成された画像は46 KBかかりますが、GIMPで作成された画像はわずか26 KBです。

量子化テーブルも異なります。

サブサンプリング、dctメソッドなどの他のパラメーターがあります。

そのため、すべてを単一の品質レベル番号で説明することはできず、jpegイメージの品質を単一の番号で比較することはできません。しかし、フォトショップやgimpのような、品質とサイズの妥協点を説明するような番号を作成できます。

詳細: http://patrakov.blogspot.com/2008/12/jpeg-quality-is-meaningless-number.html

一般的には、画像のサイズを適切なサイズに変更し、その後にjpegを適用します。この場合、巨大な画像と中間の画像は同じサイズと品質になります。

8
ton4eg

既にidentifyを使用した2つの答えがあるので、はファイル名も出力します(複数のファイルを一度にスキャンするため)

filename: qualityの単純な出力を複数の画像で使用したい場合は、次を使用できます。

identify -format '%f: %Q' *

to ファイル名+圧縮を表示 現在のディレクトリ内のすべてのファイル。

5
serv-inc

だから、基本的にあなたが気にする2つのケースがあります:

  1. 受信画像の品質設定が高すぎる場合、不適切な量のスペースを占有する可能性があります。したがって、たとえば、着信q = 99をq = 85に減らすことができます。

  2. 受信画像の品質設定が低すぎる場合、品質を上げるのはスペースの無駄です。大量のデータが破棄された画像は、品質を上げたときに魔法のように多くのスペースを占有することはありません-高品質の設定でもブロック状の画像は非常にうまく圧縮されます。したがって、私の意見では、着信q = 1をq = 85に上げることは完全に問題ありません。

このことから、適切な品質設定を強制することは、完全に受け入れられることだと思います。

3
Eric Seppanen

ここに私がうまくいくことがわかった式があります:

  1. jpg100size(98-100%の品質のためにバイト単位で超えてはならないサイズ)= width * height/1.7

  2. jpgxsize = jpg100size * x(x =パーセント、0.65など)

したがって、これらを使用して、jpgが最後に保存された品質を統計的に調べることができます。品質を65%に下げてリサンプリングを避けたい場合は、最初にサイズを比較して、サイズが低すぎないことを確認してから、品質を下げる必要があります。

3
Raul Popa

ファイルを新しく保存するたびに、全体的な品質がさらに低下します。より高い品質値を使用すると、より多くの画像が保持されます。元の画像の品質に関係なく。

2
Alexander Taran

これはばかげた質問かもしれませんが、なぜドキュメントの品質を細かく管理することに関心があるのでしょうか? ImageMagickを使用して変換を行うと、最高の効果を得るためにJPEGの品質が管理されます。 http://www.php.net/manual/en/intro.imagick.php

1
bryanjonker

最初に作成したのと同じソフトウェアを使用して同じ設定を使用してJPEGを再保存すると、損傷が最小限に抑えられることがわかります。アルゴリズムは、最初に投げ出したのと同じ情報を捨てる傾向があります。ファイルを見ただけで、どのレベルが選択されたかを知る方法はないと思います。たとえできたとしても、異なるソフトウェアは異なるパラメーターと丸めをほぼ保証し、一致をほとんど不可能にします。

1
Mark Ransom