gpt4 book ai didi

python - 使用 PythonMagick 将 PDF 转换为 JPG 时如何使透明背景变为白色而不是黑色

转载 作者:行者123 更新时间:2023-11-28 22:55:11 28 4
gpt4 key购买 nike

我正在尝试使用 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 命令本身是一个组合命令,它包括创建一个当前背景颜色的图层,其大小为第一个图像 Canvas 的大小,然后在其之上依次合成每个图层.

PythonMagick 本质上只是 Magick++ 的一个绑定(bind)层C++ 接口(interface)。 convert 提供的高级命令不一定在较低级别的库中复制,因为它们实际上是如上所述的一系列命令。因此,虽然 PythonMagick 库中没有针对它的单个命令,但可以复制该功能。

您所追求的方法是 .composite(),PythonMagick 文档非常有限(或者实际上不存在),大多数人都远离该库。但我认为用法是这样的,如果 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 channel 。尝试向命令添加详细选项以查看它发出的委托(delegate)命令,并考虑通过 os.system('gs ...') 命令自己进行 PDF 光栅化,然后调整大小。虽然我怀疑这会比仅仅调用 convert 更快。​​

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com