将多页PDF转换为PNG,具有透明度

时间:2014-06-17 10:30:44

标签: pdf png transparency ghostscript imagemagick-convert

目前我通过将PDF文件转换为PNG遇到了几个问题。 源pdf文件中的透明度会丢失。

我测试了以下终端工具来创建png: 来自poppler-tools的GhostScript,Imagemagick和pdf工具,总是在debian系统上。

图像应与pdf具有相同的尺寸,也是相同的透明度。

使用了命令:

gs -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=test%d.png -r96 -q design.pdf  -c quit
convert design.pdf test%d.png
convert design.pdf -channel rgba -alpha on PNG32:test%d.png
convert -background none -colorspace srgb design.pdf -colorspace srgb -channel rgba -alpha on PNG32:test%d.png
pdftoppm -png file.pdf test

结果不是具有透明度的预期png。背景为白色,应该是100%透明的。另外还有一个绿色条,应该是半透明的。在我的所有尝试中,结果都是一个没有透明度的浅绿色框。

要查看我的结果,我已上传源pdf,错误创建的png和预期结果(从photoshop导出)。

PDF: http://speedy.sh/W75HP/source-file.pdf
Result: http://speedy.sh/hfZMt/faulty-created-design.png
Expected: http://speedy.sh/7mpEk/design-the-way-it-should-be.png

我设法让白色背景透明,但实际的文件透明度(包括半透明的绿色条/盒)未正确转换。

我的问题的解决方案是什么?

祝你好运, 克里斯

// UPDATE 好的,我们已经找到了另一个第三方工具的解决方案,它可以轻松地产生我预期的结果。

inkscape design.pdf -z --export-dpi=100 --export-png=design.png

寻求帮助

1 个答案:

答案 0 :(得分:0)

使用Imagick(PHP扩展)我将背景颜色转换为透明,并使用这样的代码(我将带有白色背景的JPG转换为透明PNG):

$mask = new Imagick('/your/file/path.jpg');
$mask->setImageFormat('png');
$mask->paintTransparentImage('white', 0, 1000); // $fuzz = 1000 (3rd parameter) is just a guess

看看这里: http://de3.php.net/manual/en/imagick.painttransparentimage.php

对应的Imagick文档: http://www.imagemagick.org/script/command-line-options.php#transparent

此致 迈克尔