[英]How to make transparent background white instead of black when converting PDF to JPG using PythonMagick
我正在嘗試使用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本質上只是Magick ++ C ++接口的綁定層。 convert
提供的高級命令不一定要復制到較低級的庫中,因為它們實際上是如上所述的命令序列。 因此,盡管PythonMagick庫中沒有針對它的單個命令,但是可以復制該功能。
您所追求的方法是.composite .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")
NB。 合成運算符可以是PythonMagick.CompositeOperator.DstOverCompositeOp
,我不確定它是通過哪種方式處理的。
盡管PDF在ImageMagick中是一種特殊情況,但通常會傳遞給ghostscript進行柵格化。 這意味着您可能需要給ghostscript( gs
)一些奇怪的參數來正確處理alpha通道。 嘗試在該命令中添加詳細選項,以查看其發出的委托命令,並考慮通過os.system('gs ...')
命令自己進行PDF os.system('gs ...')
化,然后進行調整大小。 盡管我懷疑這會比僅調用convert
更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.