изменение размера изображения в PHP - PullRequest
1 голос
/ 06 января 2012

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

Чтобы убедиться, что результаты 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 в фотошопе, предварительный просмотр OSX и даже Pixelformer.мне было интересно, как это можно сделать в PHP?

1 Ответ

1 голос
/ 09 января 2012

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

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

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

...