使用 Imagick 转换透明 PDF 文件
Posted
技术标签:
【中文标题】使用 Imagick 转换透明 PDF 文件【英文标题】:Converting transparent PDF files with Imagick 【发布时间】:2012-09-25 05:13:55 【问题描述】:我在使用 php 和 imagick 创建缩略图时遇到问题。代码工作正常,缩略图以正确的大小生成等,但是当我尝试在缩略图上放置 PDF 徽标时,它变成了半透明。我想这与在 InDesign 中生成的 PDF 文件有关,它可能没有定义任何背景。有没有人遇到过这个问题或知道该怎么做?我试图在背景中放置一块白色的画布,但这并没有帮助。我还为复合图像函数指定了一个通道,但这也没有帮助。
这是我遇到问题的 PDF 文件:https://dl.dropbox.com/u/13712643/Case_Study.pdf 生成的缩略图如下所示: https://dl.dropbox.com/u/13712643/Case_Study1.jpg
到目前为止我生成的代码:http://pastebin.com/74CYC972
有什么想法吗?感谢您的帮助。
【问题讨论】:
我的 PDF 缩略图功能也遇到了同样的问题!它很痛苦,将背景设置为透明并不能解决它。如果我在不调整大小的情况下渲染图像,但透明度问题消失了。 【参考方案1】:我遇到了同样的问题,我使用Imagick::compositeImage 解决了这个问题:php imagick convert PNG to jpg
代码如下:
$im = new Imagick();
$im->readimage($pdfFile."[$currentPage]");
$res = $im->getimageresolution();
$bg = new Imagick();
$bg->setresolution($res["x"],$res["y"]); //setting the same image resolution
//create a white background image with the same width and height
$bg->newimage($im->getimagewidth(), $im->getimageheight(), 'white');
$bg->compositeimage($im, Imagick::COMPOSITE_OVER, 0, 0); //merging both images
$bg->setimageformat("png");
//then you can write to a file
$bg->writeImage('white-background-pdf-image.png');
//or output it
header('Content-type: image/png');
echo $bg;
【讨论】:
【参考方案2】:也许这就是你要找的东西:
$im->setBackgroundColor(new ImagickPixel('transparent'));
http://www.php.net/manual/en/imagick.setbackgroundcolor.php
【讨论】:
感谢您的回答。不幸的是,这并没有改变任何东西。【参考方案3】:现有的答案都不适合我。在创建一个新的 imagick() 后将图像展平:
$im = $im->flattenImages();
编辑:flattenImages 方法已被弃用和删除。使用
$im = $im->mergeImageLayers( imagick::LAYERMETHOD_FLATTEN );
【讨论】:
以上是关于使用 Imagick 转换透明 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章
ImageMagick/Imagick 使用原生 PHP API 将 PDF 转换为 JPG
PHP Imagick 不适用于 Laravel 8 中的 PDF 文件,简单的 ImagickException
Imagick 无法将 PDF 转换为 JPEG,但 ImageMagick 可以
windows7下Wamp安装php扩展imagick(转)