2012-05-18 2 views
0

Я делаю несколько тестов и выяснил, что Imagemagick создает изображения большего размера по сравнению с GD-библиотекой.Различия в размере файла изображения между библиотекой Imagemagick и GD

Я попытался использовать метод thumbnailImage, а также метод resizeImage (с различными фильтрами) Imagemagick для создания изображения максимального размера 1024x680 jpeg с сжатием JPEG и качеством 80 и разрешением 72 пикселя на дюйм, а также с помощью метода stripImage удалите ненужные метаданные. Размер файла, созданного Imagemagick, всегда находится в диапазоне от 700 КБ до 800 КБ в зависимости от различных фильтров. С другой стороны, GD-библиотека создает изображение размером 1024x680, размер которого составляет всего 41 КБ.

Может кто-нибудь объяснить разницу в размерах файлов. Я открыл 2 файла в Фото-магазине и проверил, чтобы увидеть любые различия, но не смог найти (DPI, цветной профиль, 8-битный канал и т. Д.), Но все же не могу объяснить разницу в размерах файлов.

+0

Поскольку алгоритм JPEG стандартизирован, единственным отличием от остальных может быть тип хранилища: прогрессивный/чересстрочный. Если вы полностью уверены, все остальные настройки (качество!) Равны. – jimpic

+0

Привет, я пробовал делать $ image-> setInterlaceScheme (Imagick :: INTERLACE_JPEG); , и это уменьшило размер на 40 КБ или, тем не менее, созданное изображение 711 КБ, которое кажется довольно большим по сравнению с тем, что создает библиотека GD. – Chetan

ответ

0

Разница кажется довольно большой; когда несколько лет назад я провел несколько тестов, размер файла IM был примерно в 5 раз больше размера GD. Было бы интересно увидеть ваш фактический код.

Я на работе в данный момент, но есть фото изменен до 592 х 592 и размер файла является 50.3KB я знаю, что это не тот же размер, как у вас, но он был сохранен в качестве 100

Вы можете запустить это и посмотреть, что IM говорит о выходных файлов: конвертировать изображения -Verbose -identify

EDIT:

Вы должны делать что-то неправильно, я просто запустить тест и результаты ниже - по какой-то причине в размер миниатюры такой же, как размер размера! Может быть, ошибка.

Оригинальный размер файла: 4700 х 3178 2.31MB

-resize размеры = 1021 х 680 186Кб

-thumbnail размеры = 1021 х 680 186Кб

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 который по-прежнему довольно большой. Первоначальный файл Hi-Res, который я тестирую, представляет собой JPEG размером 3008x2000 (4.2MB).

Edit:

Я думаю, что я понял это, метод setCompression() делает это для объекта, а не образ, а я setImageCompression() и setImageCompressionQuality() и теперь размер уменьшился до 100Кб .. Все хорошо Теперь!

+0

Я думаю, что я понял, метод setCompression делает это для объекта, а не для изображения, вместо этого я использовал setImageCompression и setImageCompressionQuality, и он работал, и теперь размер уменьшился до 100 КБ. хорошо сейчас. – Chetan

1

Возможно, настройки качества GD и ImageMagick нелегко сопоставимы, 80% в одном не означает то же самое, что и 80% в другом. Я нашел следующее примечание в article form Smashing Magazine:

Оказывается, что масштабы качества JPEG не определены в спецификации или стандарта, и они не являются однородными по кодеров. Качество 60 в Photoshop может быть таким же, как качество 40 в одной программе, качество B + в другом и качественное фантастическое в третьем.В моих тестах я обнаружил, что Photoshop 60 ближе всего к -качество 82 в ImageMagick.

Таким образом, вы можете уделять больше внимания качеству при сравнении разных файлов результатов. Возможно, цвета отличаются или у gd-изображения больше артефактов.

Смежные вопросы