我正在尝试使用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/