2012-01-06 89 views
1

虽然我在做一些图像处理,我发现,GD和Imagick在PHP不调整图像颜色的像素相同的水平,这在大多数情况下,都没有必要的。 现在,以防万一,我需要从任何尺寸的图像缩放到256 * 256图像调整大小在PHP

为了确保测试结果是一致的,我使用了一个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? – 2012-01-09 10:13:35

+0

我不知道我完全理解你的问题,但每个图像处理库通常*不会*使用相同的确切算法。无论你的测试是什么,他们都不能依赖这样的假设。 – 2012-01-09 10:19:09

回答

1

由于您的图像格式(JPEG - 从100质量设置假设)是你重新压缩图像,你不会得到无损吞吐量这种方式有损格式。

你应该尝试检测图像的尺寸和使用原始图像,如果尺寸已经是正确的。

当你不改变在Photoshop或OSX预览尺寸(原始尺寸=尺寸调整后),他们将不会重新压缩图像,这就是为什么你不会看到任何变化。

+0

但在我的代码中,有一行我将压缩值设置为100,这是没有压缩。不是说未压缩的图像会保持不变吗?即使我使用JPEG,质量损失时也会发生;为什么像素的值在我压缩之前没有改变?例如=> imagecolorat($ img)....检索到的值与原始值不相同。 – tom91136 2012-01-09 15:43:36

+0

JPEG为100质量远离非压缩 – bardiir 2012-01-09 15:44:51

+0

再次检查的评论,我已经更新它 – tom91136 2012-01-09 15:46:50