如何解决更改颜色范围图像
我正在使用 PHP-Imagick 将 PDF 转换为图像,效果很好。
一个简化的例子:
$im = new imagick();
$im->setResolution(250,250);
$page = $pdfPath."[0]";
$im->readImage($page);
if($im->getImageColorspace() == Imagick::COLORSPACE_CMYK)
{
$im->transformImageColorspace(Imagick::COLORSPACE_SRGB);
$im->autoLevelImage();
}
$im->setImageFormat('jpg');
$im->setImageCompression(imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(90);
$im->writeImage("page1.jpg");
但是,例如,颜色似乎与原始 PDF 不同(参见图片)
- 左侧是原始 PDF。
- 渲染图像的右侧,其颜色与原始图像不同。
原来的深粉色好像变成了紫色。红色似乎也饱和了。
我尝试了以下方法,但都没有效果:
- 降低饱和度(例如 $im->modulateImage(100,80,100); )但这会导致红色变成橙色,黄色变成绿色。(见下面的例子)
-
使用图像过滤器(例如 imagefilter($im,IMG_FILTER_COLORIZE,100,0); ),但这也会改变所有颜色。
-
认为这与 CMYK 和 RGB 之间的差异有关,我添加了 $im->transformImageColorspace() 并没有做任何事情来解决这个问题。
-
使用各种色调过滤器,但这些也会改变图像的所有颜色。
问题:似乎我需要减少图像的发红度? (我认为这是导致差异的过度红色)而不影响其他颜色,因此例如黄色保持黄色。有没有办法在 PHP 中做到这一点?
解决方法
解决方法是在读取图片之前添加以下行:
代码应该是:
$im->setColorspace(Imagick::COLORSPACE_SRGB);
$im->readImage($page);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。