簡體   English   中英

使用PythonMagick將PDF轉換為JPG時如何使透明背景變為白色而不是黑色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM