7

ユーザーが画像をアップロードできるようにします。ただし、JPEG の品質を 90% 以下に保ちたいと考えています。私が計画していることは、現在の品質を検出することです: - 90% 未満の場合は何もしません - 90% を超える場合は、Image Magick を使用して画像を 90% に再圧縮します

それは可能ですか?私は PHP を好みますが、どの言語でも役に立ちます。

4

7 に答える 7

8

OPがphpを好むと述べたので、私は以下を提供します:

$img = new Imagick($filename);
$quality = $img->getImageCompressionQuality();
于 2015-06-24T17:36:58.997 に答える
4

調子はどう?私は開発中のアプリで同じ問題に直面していました...私の問題は、ランダムなサイトからいくつかの画像を抽出し、各アイテムに複数の画像があることです。各アイテムに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 までメールをお送りください。

于 2013-10-08T18:28:34.157 に答える
0

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 で使用されるものなど) は、異なるエンコード メトリックを使用します。

于 2015-06-28T12:08:18.507 に答える