我正在使用 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 不同(参见图片)
原来的深粉色好像变成了紫色。红色似乎也饱和了。
我尝试了以下方法,但都没有效果:
使用图像过滤器(例如 imagefilter($im, IMG_FILTER_COLORIZE,100, 0, 0); ),但这也会改变所有颜色。
认为这与 CMYK 和 RGB 之间的差异有关,我添加了 $im->transformImageColorspace() 并没有做任何事情来解决这个问题。
使用各种色调过滤器,但这些也会改变图像的所有颜色。
问题:似乎我需要减少图像的发红度? (我认为这是导致差异的过度红色)而不影响其他颜色,因此例如黄色保持黄色。有没有办法在 PHP 中做到这一点?
答案 0 :(得分:0)
解决方法是在读取图片之前添加以下行:
代码应该是:
$im->setColorspace(Imagick::COLORSPACE_SRGB);
$im->readImage($page);