我需要从PDF文件生成jpg图片(仅首页)。PDF文件是用户生成的,因此可以包含任何内容。我当前正在使用以下代码:
// Load PDF.
$i = new Imagick;
// Create thumbnail of first page of PDF.
$i->setResolution(150, 150);
$i->loadImage("test.pdf[0]");
$i->thumbnailImage(640, 480, true);
// Remove transparency, fill transparent areas with white rather than black.
$i->setImageBackgroundColor("white");
$i->setImageAlphaChannel(11); // Imagick::ALPHACHANNEL_REMOVE
$i->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
// Output.
$i->writeImage("test.jpg");
这可以按预期工作,因为透明度变为白色而不是黑色。但是,我遇到了一些生成的jpg图像的问题,因此我遇到jpeginfo
了它们:
$ jpeginfo -c test.jpg
test.jpg 960 x 480 32位JFIF N 9481不支持的颜色转换请求[错误]
事实证明,某些源PDF实际上使用CMYK,并且当另存为jpg时显然不会转换为RGB。因此,我将代码更改为以下内容(添加了一行)以显式转换为RGB:
// Load PDF.
$i = new Imagick;
// Create thumbnail of first page of PDF.
$i->setResolution(150, 150);
$i->loadImage("test.pdf[0]");
$i->thumbnailImage(640, 480, true);
// Remove transparency, fill transparent areas with white rather than black.
$i->setImageBackgroundColor("white");
$i->setImageAlphaChannel(11); // Imagick::ALPHACHANNEL_REMOVE
$i->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
// Convert to RGB to prevent creating a jpg with CMYK colors.
$i->setImageColorspace(Imagick::COLORSPACE_RGB);
// Output.
$i->writeImage("test.jpg");
这样会创建一个带有RGB
颜色配置文件的jpeg 。但是,由于某些晦涩的原因,它会再次产生黑色背景的图像。换句话说:透明度问题又回来了。为什么Imagick这样做,更重要的是,透明性问题和透明性问题的解决方案是什么CMYK
?
正确使用的函数是transformImageColorspace而不是setImageColorspace。TransformImageColorspace用于现有图像,setImageColorspace用于新图像,例如svg绘图。
我已将其添加到手册中,并且应该很快就会出现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句