2

Imagick を使用しており、画像を最大ファイル サイズ 2.5 MB にスケーリングしたい

私はこの SOF の質問を見ました: ImageMagick:まさに私がやりたいことですが、extent()Imagick のメソッドにはサイズ パラメーターがありません: http://www.php.net/ manual/en/imagick.extentimage.php

どうすればそれができるか知っている人はいますか?現在、元のファイル サイズとターゲット ファイル サイズの間の係数を計算して新しい解像度を計算しようとしていますが、解像度がファイル サイズに比例しないことがわかりました。

更新- 出力形式は常に JPEG であるため、保存する前にサイズを計算する方法があれば、それは素晴らしいことです

前もって感謝します、マキシム

4

1 に答える 1

3

呼び出しているエクステント関数は、画像のサイズを設定するだけです。

jpeg 範囲オプションを設定する関数は次のとおりです。

$imagick->setOption('jpeg:extent', '2500kb');

興味深いことに、関数 $imagick->getImageBlob() は、このオプションを設定するとクラッシュするようです。ファイルのバイトを直接取得するのではなく、ファイルをディスクに書き込む必要があります。

出力形式は常に JPEG なので、保存する前にサイズを計算する方法があれば、それは素晴らしいことです

ありません。各画像の細部の量によって、特定の画質での圧縮後の画像のサイズが決まります。そのため、最終的なサイズになる品質レベルを計算することはできません。

ファイル サイズを制限する、基になる Image Magick ライブラリの C コードは次のとおりです。

maximum=101;
for (minimum=2; minimum < maximum; )
{
    jpeg_image->quality=minimum+(maximum-minimum+1)/2;
    status=WriteJPEGImage(jpeg_info,jpeg_image);
    if (GetBlobSize(jpeg_image) <= extent)
      minimum=jpeg_image->quality+1;
    else
      maximum=jpeg_image->quality-1;
    }
}

つまり、指定された値に対して許容可能なファイル サイズを与えるレベルが見つかるまで、さまざまな画質レベルでファイルを再圧縮するだけです。

于 2013-10-28T15:52:01.100 に答える