0

私はいくつかのテストを行っており、Imagemagick は GD ライブラリと比較してより大きなファイル サイズの画像を作成することがわかりました。

私は、ImagemagickのthumbnailImageメソッドとresizeImageメソッド(異なるフィルターを使用)を使用して、最大寸法1024x680 jpegの画像をJPEG圧縮と品質80で1インチあたり72ピクセルの解像度で作成しようとしましたが、stripImageメソッドを使用して不要なメタデータを削除しています. Imagemagick で作成されるファイル サイズは、さまざまなフィルターに応じて常に 700KB から 800KB の範囲になります。一方、GD ライブラリは 1024x680 のサイズの画像を生成しますが、サイズはわずか 41KB です。

どなたかファイルサイズの違いを教えてください。フォト ショップで 2 つのファイルを開き、違いがないか確認しましたが、何も見つかりませんでした (DPI、カラー プロファイル、8 ビット チャネルなど)。ただし、ファイル サイズの違いはまだ説明できません。

4

3 に答える 3

1
$srgbPath = "pathTosrgbColorProfile";
$srgb = file_get_contents($srgbPath);
$image->profileImage('icc', $srgb);
$image->stripImage();
$image->setImageResolution(72,72);
$image->setImageUnits(1);
$image->setInterlaceScheme(Imagick::INTERLACE_JPEG);
$image->setImageCompression(imagick::COMPRESSION_JPEG);
$image->setImageCompressionQuality(80);
$image->setColorspace(imagick::COLORSPACE_SRGB);

$image->resizeImage($thumb_width,$thumb_nheight,imagick::FILTER_CATROM,1);
$image->writeImage($destination); 

サイズは 40KB 減少し、出力は 711KB になりましたが、それでもかなり大きいです。私がテストしている高解像度の元のファイルは、サイズが 3008x2000 (4.2MB) の jpeg です。

編集:

私はそれを理解したと思います.メソッドsetCompression()は画像ではなくオブジェクトに対してそれを行います.代わりに私が使用setImageCompression()setImageCompressionQuality()たところ、サイズは100KBに減少しました.

于 2012-05-20T21:09:29.273 に答える
1

おそらく、GD と ImageMagick の品質設定は簡単には比較できないでしょう。一方の 80% は、他方の 80% と同じという意味ではありません。Smashing Magazineの記事で次のメモを見つけました。

JPEG 品質スケールは仕様または標準で定義されておらず、エンコーダ間で統一されていないことが判明しました。Photoshop での 60 の品質は、あるプログラムでの 40 の品質、別のプログラムでの品質 B+、3 番目のプログラムでの品質の幻想と同じかもしれません。私のテストでは、Photoshop の 60 が ImageMagick の -quality 82 に最も近いことがわかりました。

したがって、異なる結果ファイルを比較するときは、品質にもっと注意を払うことができます。色が異なるか、gd 画像にアーティファクトが含まれている可能性があります。

于 2016-06-03T16:18:19.630 に答える
0

違いはかなり大きいようです。数年前にいくつかのテストを行ったとき、IMのファイルサイズはGDの約5倍でした。実際に使用されているコードを確認するのは興味深いことです。

私は現在仕事中ですが、写真のサイズを592 x 592に変更し、ファイルサイズは50.3KBです。あなたと同じサイズではないことはわかっていますが、品質100で保存されました。

これを実行して、IMが出力ファイルについて何を言っているかを確認できます。convertimage -verbose -identify

編集:

テストを実行したところ、結果は以下のとおりです。何らかの理由で、サムネイルのサイズがサイズ変更のサイズと同じになっています。多分バグ。

元のファイルサイズ:4700 x 3178 2.31MB

-サイズ変更=1021x 680 186kb

-サムネイルの寸法=1021x 680 186kb

GD寸法=1024x 682 100kb

$original = 'IMG_4979_1.CR2';

// Convert to jpg as GD will not work with CR2 files
exec("convert $original image.jpg");

$image = "image.jpg";

exec("convert $image -resize 1024x680 output1.jpg");

exec("convert $image -thumbnail 1024x680 -strip output2.jpg");

// Set the path to the image to resize
$input_image = 'image.jpg';
// Get the size of the original image into an array
$size = getimagesize( $input_image );
// Set the new width of the image
$thumb_width = "1024";
// Calculate the height of the new image to keep the aspect ratio
$thumb_height = ( int )(( $thumb_width/$size[0] )*$size[1] );
// Create a new true color image in the memory
$thumbnail = ImageCreateTrueColor( $thumb_width, $thumb_height );
// Create a new image from file 
$src_img = ImageCreateFromJPEG( $input_image );
// Create the resized image
ImageCopyResampled( $thumbnail, $src_img, 0, 0, 0, 0, $thumb_width, $thumb_height, $size[0], $size[1] );
// Save the image as resized.jpg
ImageJPEG( $thumbnail, "output3.jpg" );
// Clear the memory of the tempory image 
ImageDestroy( $thumbnail );
于 2012-05-18T07:14:02.360 に答える