ユーザーが画像をアップロードできるようにします。ただし、JPEG の品質を 90% 以下に保ちたいと考えています。私が計画していることは、現在の品質を検出することです: - 90% 未満の場合は何もしません - 90% を超える場合は、Image Magick を使用して画像を 90% に再圧縮します
それは可能ですか?私は PHP を好みますが、どの言語でも役に立ちます。
ユーザーが画像をアップロードできるようにします。ただし、JPEG の品質を 90% 以下に保ちたいと考えています。私が計画していることは、現在の品質を検出することです: - 90% 未満の場合は何もしません - 90% を超える場合は、Image Magick を使用して画像を 90% に再圧縮します
それは可能ですか?私は PHP を好みますが、どの言語でも役に立ちます。
OPがphpを好むと述べたので、私は以下を提供します:
$img = new Imagick($filename);
$quality = $img->getImageCompressionQuality();
調子はどう?私は開発中のアプリで同じ問題に直面していました...私の問題は、ランダムなサイトからいくつかの画像を抽出し、各アイテムに複数の画像があることです。各アイテムに1つの画像を表示して、ユーザーに最高品質の画像を提供します。
私はこのアイデアを思いつきました。これは非常にシンプルで、あらゆる言語やあらゆるタイプの圧縮で機能します。
//Parameters you will need to retrieve from image
$width = 0;
$height = 0;
$filesize = 0;
//Quality answer for your image
$quality = (101-(($width*$height)*3)/$filesize);
上記のhttp://fotoforensics.com/tutorial-estq.phpに対してこのアルゴリズムを実行した結果は次のとおりです。
Filename Width Height Pixels BitmapBytes FileBytes Quality
estq-baseline.png 400 300 120000 360000 163250 98,79
estq-90.jpg 400 300 120000 360000 34839 90,67
estq-80.jpg 400 300 120000 360000 24460 86,28
estq-70.jpg 400 300 120000 360000 19882 82,89
estq-25.jpg 400 300 120000 360000 10300 66,05
このアルゴリズムの背後にある基本的な考え方は、ビットマップ形式 (圧縮なし、ピクセルあたり 3 バイト、RGB の場合は 3 バイト) で書き込まれた場合に画像が到達できるサイズを、この画像が現在使用しているサイズと比較することです。画像サイズが小さいほど、使用される圧縮方法に関係なく、圧縮率が高くなります。JPG、PNG などの圧縮方法ではなく、圧縮されていない画像と圧縮された画像の間のギャップが大きくなったり小さくなったりします。
また、これは比較のための数学的な解決策であることにも注意してください。このメソッドは実際の画像の品質を返すのではなく、圧縮されていないサイズと圧縮されたサイズの間の距離のパーセンテージを返します。
詳細が必要な場合は、rafaelkarst@gmail.com までメールをお送りください。
ImageMagick の代わりに GraphicsMagick を使用している場合は、次のコマンドで JPEG 品質を取得できます。
gm identify -format '%[JPEG-Quality]' path_to/image_file.jpg
ドキュメントによると http://www.graphicsmagick.org/GraphicsMagick.html#details-format
JPEG には「品質」という概念がなく、ソフトウェアによって使用および推定される品質メトリックは、IJG JPEG 6b によって確立された品質メトリックに基づいていることに注意してください。他のエンコーダー (Adobe Photoshop で使用されるものなど) は、異なるエンコード メトリックを使用します。