2012-05-18 81 views
0

我一直在做一些測試,發現Imagemagick與GD庫相比創建了更大的文件大小的圖像。Imagemagick和GD庫之間的圖像文件大小差異

我已經嘗試使用thumbnailImage方法,還調用Imagemagick的resizeImage方法(使用不同的過濾器),用於創建最大尺寸爲1024x680 jpeg的JPEG壓縮和質量80的圖像,並且每英寸分辨率爲72像素,並且還使用stripImage方法刪除不需要的元數據。由Imagemagick創建的文件大小總是在700KB到800KB的範圍內,具體取決於各種過濾器。另一方面,GD庫產生大小僅爲41KB的大小爲1024x680的圖像。

任何人都可以請解釋文件大小的差異。我在Photo店裏打開了2個文件,檢查是否有差異,但找不到任何(DPI,色彩配置文件,8位通道等),但仍不能解釋文件大小的差異。

+0

由於JPEG算法是標準化的,唯一的差異可能是存儲類型:逐行掃描/隔行掃描。如果您完全確定,所有其他設置(質量!)都是平等的。 – jimpic

+0

嗨,我試圖做$ image-> setInterlaceScheme(Imagick :: INTERLACE_JPEG); ,它縮小了40KB左右,但仍創建的圖像爲711KB,與GD庫創建的圖像相比,它看起來相當大。 – Chetan

回答

0

差異似乎相當大;當幾年前我做了一些測試時,IM的文件大小約爲GD的5倍。 看到您使用的實際代碼會很有趣。

我在此刻的工作,但有照片調整爲592 X 592以及文件大小爲50.3KB我知道這是不是大小相同的你,但它被保存在質量100

您可以運行這一點,看看IM說對輸出文件: 轉換圖像-verbose -identify

編輯:

你必須做一些錯事,但我剛剛運行測試和結果如下 - 出於某種原因,縮略圖大小與調整大小相同!也許是一個錯誤。

原始文件大小:4700 X 3178 2.31MB

調整大小尺寸= 1021 X 680 186KB

-thumbnail尺寸= 1021 X 680 186KB

GD尺寸= 1024×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); 
+0

嗨,我已經發布了我的代碼 – Chetan

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。所有好現在!

+0

我想我明白了,setCompression的方法是爲對象而不是圖像,我使用了setImageCompression和setImageCompressionQuality,它的工作和現在的大小已經減小到100KB ..所有現在好,謝謝你們 – Chetan

1

也許GD和ImageMagick的質量設置不容易比較,80%在一個不等於另一個的80%。我發現下面的註釋在article form Smashing Magazine

事實證明,JPEG質量尺度並不是一個規範或標準定義,並不能跨編碼器均勻。 Photoshop中的質量60可能與一個程序中的質量爲40,另一個質量爲B +,質量爲三分之一。在我的測試中,我發現Photoshop 60在ImageMagick中最接近82。

因此,比較不同的結果文件時,您可能會更注重質量。也許顏色不同或gd圖像有更多的文物。

相關問題