我正在使用PHP进行图像编辑,由于GD提供的功能较少,因此我切换到了Imagick。
其中一个过程是将图像灰度化。一切都很顺利(在本地的Windows 7上,Imagick 2.2.1-dev 6.5.8-7 Q16),直到我将脚本上传到我的Web托管服务器(Linux,Imagick 3.0.1,6.2.8,2010-10-20,Q16)。
我尝试了更改质量,但没有改善任何内容。
$img->setImageCompression(imagick::COMPRESSION_JPEG); $img->setImageCompressionQuality(100);
以下是GD、Imagick和Photoshop的结果:
我认为版本3.0.1出了问题。有人可以确认一下吗?
Q1: 是否有其他方法可以使用Imagick
将图像转换为灰度?
Q2: 是否可以将GD资源转换为Imagick?这样我就可以使用imagefilter($img, IMG_FILTER_GRAYSCALE);
来获取正确的结果,然后使用Imagick输出。
附注:对于Q2,您可能会建议我只使用GD来处理图像。但问题是imagejpeg()
不能保存保留分辨率的图像。这实际上是我切换到Imagick的原因。
$img->modulateImage(100, 0, 100);
,其中参数为(亮度,饱和度,色调)
。我相信这是正确的函数使用方式,并且在2.2.1版本中确实可以正常工作。 - user1643156modulateImage
确实是改变亮度、饱和度和色调的函数。为什么不使用它呢?版本2.2.1产生的结果几乎与Photoshop相同。而3.0.1的结果显然是错误的。 - user1643156modulateImage()
做了比你需要的更多的事情,这使它更容易出现问题(正如你刚刚看到的)。颜色空间的方法更加可靠,因为你告诉 imagick 明确地切换到灰度,而不仅仅是应用随机的颜色滤镜(我的意思是,imagick 知道你的最终结果应该是灰度吗?)。 - Christian