2

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かなり時間がかかるように見えるので、私はそれを使用したくありません。

4

1 に答える 1

4

-flattenコマンドライン オプションのドキュメントを見ると、それが のエイリアスであることがわかります-layers flatten

この-layers flattenコマンド自体は組み合わせコマンドであり、現在の背景色と最初のイメージ キャンバスのサイズのレイヤーを作成し、その上に各レイヤーを順番に構成します。

PythonMagick は基本的に、Magick++ C++ インターフェイスへのバインディング レイヤーにすぎません。提供される高度なコマンドconvertは、実際には上記の一連のコマンドであるため、必ずしも下位レベルのライブラリに複製されるとは限りません。そのため、PythonMagick ライブラリには単一のコマンドはありませんが、機能は複製できます。

あなたが求めている方法は.composite()、PythonMagickのドキュメントが非常に限られている(または実際には存在しない)ため、ほとんどの人はライブラリを避けています。しかし、PDFにレイヤーが1つしかない場合(完全にテストされていない)、使用法は次のようなものだと思います:

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 は通常、ghostscript に渡されてラスタライズされるため、ImageMagick では特殊なケースですが。つまり、アルファ チャネルを適切に処理するために、ghostscript ( gs) に奇妙なパラメータを与える必要があるかもしれません。コマンドに冗長オプションを追加して、コマンドが発行するデリゲート コマンドを確認し、コマンドを使用して自分で PDF のラスタライズos.system('gs ...')を行い、サイズ変更を行うことを検討してください。ただ呼び出すよりも速いとは思いませんがconvert

于 2013-06-24T18:32:59.550 に答える