更改颜色范围图像

时间:2021-01-20 10:51:21

标签: php image gd imagick

我正在使用 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。
  • 渲染图像的右侧,其颜色与原始图像不同。

enter image description here

原来的深粉色好像变成了紫色。红色似乎也饱和了。

我尝试了以下方法,但都没有效果:

  1. 降低饱和度(例如 $im->modulateImage(100, 80, 100); )但这会导致红色变成橙色,黄色变成绿色。(见下面的例子)

enter image description here

  1. 使用图像过滤器(例如 imagefilter($im, IMG_FILTER_COLORIZE,100, 0, 0); ),但这也会改变所有颜色。

  2. 认为这与 CMYK 和 RGB 之间的差异有关,我添加了 $im->transformImageColorspace() 并没有做任何事情来解决这个问题。

  3. 使用各种色调过滤器,但这些也会改变图像的所有颜色。

问题:似乎我需要减少图像的发红度? (我认为这是导致差异的过度红色)而不影响其他颜色,因此例如黄色保持黄色。有没有办法在 PHP 中做到这一点?

1 个答案:

答案 0 :(得分:0)

解决方法是在读取图片之前添加以下行:

代码应该是:

$im->setColorspace(Imagick::COLORSPACE_SRGB);
$im->readImage($page);