【发布时间】:2012-11-12 21:41:24
【问题描述】:
我在用 PHP 做一些图像编辑,因为 GD 提供的功能较少,所以我切换到了 Imagick。
其中一个过程是灰度图像。在我将脚本上传到我的网络托管服务器(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输出。
ps:对于 Q2,你可能会建议我只使用 GD 来处理图像。但问题是imagejpeg() 无法保存保留分辨率的图像。这实际上是我切换到 Imagick 的原因。
【问题讨论】:
-
您使用什么代码通过 Imagick 转换为灰度?你在使用 $image->setColorspace(imagick::COLORSPACE_GRAY);看看这个stackoverflow.com/questions/4539307/…
-
它是
$img->modulateImage(100, 0, 100);,其中参数是(brightness, saturation, hue)。我相信它是正确使用的功能,而且它确实适用于 2.2.1 版本。 -
仅仅因为它适用于特定版本并不意味着它是正确使用的功能。使用 Jeremy 提到的内容可以确保您的图片实际上是灰度的,即使是 JPEG 文件格式也是如此。你正在做的只是一个过滤器。 编辑: Google 上五分之三的搜索结果表明了 Jeremy 的方法。
-
看起来是从 6.5.7 版本开始才有的,而且你服务器上的版本可能更旧。 modulateImage 应该可以工作,但显然不如它可以工作。 php.net/manual/en/imagick.setcolorspace.php
-
@Christian 来吧,你读过手册吗?
modulateImage是确实是改变亮度,饱和度和色调的功能。为什么它不是正确使用的功能? 2.2.1 版产生与 Photoshop 几乎相同的结果。 3.0.1 的结果显然是错误的。