2012-01-06 4 views
1

Пока я занимался обработкой изображений, я узнал, что GD и Imagick в PHP не изменяют размер изображения до одинакового уровня пикселя, что в большинстве случаев не требуется. Теперь в случае, мне нужно изображение от любого измерения до масштаба до 256 * 256Изменение размера изображения в PHP

Чтобы убедиться, что результаты TEST согласованы, я использовал изображение 256 * 256 и изменил его размер до собственного размера.

что я пытался:

imagecopyresized($new, $img, 0, 0, $x, 0, $width, $height, $w, $h); //256 , 256 

и

$compression_type = imagick::COMPRESSION_NO; 
$images_ima = new Imagick($image_path); //$image_path = path to image... 
$images_ima->setImageCompression($compression_type); 
$images_ima->setImageCompressionQuality(100); 
$images_ima->sampleImage($X_SIZE,$Y_SIZE); // 256 ,256 
$images_ima->writeImages($dest_path, true); //destination path 

никто из них не работал, если я сравнить результат с исходным изображением, он будет выглядеть примерно так: Araxis merge comparison on original VS resized

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

Я могу достичь пиксельного и пиксельного одинакового изменения размера с 256 * 256 до 256 * 256 в Photoshop, предварительного просмотра OSX и даже Pixelformer. Мне было интересно, как это можно сделать с PHP?

+0

Почему вы не просто используете imagecopy, если обнаруживаете, что размеры пикселей идентичны? –

+0

Я не уверен, что полностью понимаю ваш вопрос, но каждая библиотека обработки изображений обычно * не * использует один и тот же точный алгоритм. Независимо от ваших тестов, они не могут полагаться на такое предположение. –

ответ

1

Поскольку ваш формат изображения (jpeg - предполагается из 100 параметров качества) - это формат с потерями, вы не получите пропускную способность без потерь таким образом, когда вы повторно сжимаете изображение.

Вы должны попытаться определить размеры изображения и использовать исходное изображение, если размеры уже правильные.

Если вы не изменяете размеры (исходные размеры = размеры после изменения размера) в превью Photoshop или OSX, они не будут повторно сжимать изображение, поэтому вы не увидите никаких изменений.

+0

, но в моем коде есть строка, где я устанавливаю значение сжатия 100, которое не является сжатием. не то, что изображение несжатое останется неизменным? даже если я использую JPEG, когда произойдет потеря качества; почему значение пикселя изменилось даже до того, как я сжимаю его? Например => imagecolorat ($ img) .... полученные значения не идентичны исходным. – tom91136

+0

jpeg с качеством 100 находится далеко от несжатого – bardiir

+0

еще раз проверьте комментарий, обновил ли он его – tom91136

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