我正在尝试使用PythonMagick将PDF转换为JPG,但是我找不到设置背景颜色的方法,默认情况下背景颜色从透明改为黑色。我可以使用os.system和-flatten参数获得所需的结果,如下所示。

import os
os.system('convert -flatten -background \#ffffff -density 400 -adaptive-resize 1900x infile.pdf outfile.jpg')

然而,PythonMagick似乎没有flatten方法,下面的代码片段生成了一个黑色背景的图像。
import PythonMagick
import os
img = PythonMagick.Image("infile.pdf")
img.backgroundColor('#ffffff')
img.density('400')
img.resize('1900x')
img.magick('JPG')
img.quality(60)
img.write("outfile.jpg")

还有一个transparent()方法接受颜色。我不太清楚这是干什么用的,但是img.transparent('#ffffff')没有帮助。有没有其他方法可以达到同样的效果?我不想用os.system来做,因为它似乎要花很长时间。

最佳答案

如果查看-flatten命令行选项的文档,您将看到它是-layers flatten的别名。
-layers flatten命令本身就是一个组合命令,它包括创建一个当前背景颜色的层,其大小与第一个图像画布的大小相同,然后依次在其上组合每个层。
PythonMagick本质上只是一个与AA> C++界面的结合层。convert提供的高级命令不一定要复制到低级库中,因为它们实际上是上面描述的一系列命令。因此,虽然PythonMagick库中没有针对它的单个命令,但可以复制该功能。
你所使用的方法是.composite(),PythOnMaigk文档是如此有限(或者确实不存在),大多数人都远离图书馆。但我认为,如果PDF中只有一个层(完全未经测试),那么它的用法是这样的:

import PythonMagick

img = PythonMagick.Image("infile.pdf")

img.density('400')

bgColour = PythonMagick.ColorRGB(1.0, 1.0, 1.0)
size = "%sx%s" % (img.columns(), img.rows())

flattened = PythonMagick.Image(size, bgColour)
flattened.type = img.type

flattened.composite(img, 0, 0, PythonMagick.CompositeOperator.SrcOverCompositeOp)

flattened.resize('1900x')
flattened.magick('JPG')
flattened.quality(60)

flattened.write("outfile.jpg")

注意。构图运算符可以是PythonMagick.CompositeOperator.DstOverCompositeOp,我不确定它是如何处理的。
尽管pdf是ImageMagick的特例,因为它们通常被传递给ghostscript进行光栅化。这意味着您可能需要给ghostscript(gs)一些奇怪的参数来正确处理alpha通道。尝试在命令中添加详细选项,查看它发出的委托命令,并考虑通过os.system('gs ...')命令自己执行PDF光栅化,然后执行大小调整。尽管我怀疑这会比打电话给convert更快。

关于python - 使用PythonMagick将PDF转换为JPG时如何使透明背景变为白色而不是黑色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17279961/

10-11 20:19