28

Python2.5でReportLab2.3を使用してPDFに結合しようとしている2つのPNGがあります。canvas.drawImage(ImageReader)を使用していずれかのPNGをキャンバスに書き込んで保存すると、透明度が黒くなります。PIL(1.1.6)を使用して新しい画像を生成し、いずれかのPNGをPIL画像にpaste()すると、うまく合成されます。Gimpをダブルチェックしましたが、両方の画像にアルファチャンネルがあり、正しく保存されています。エラーが発生せず、google-fuで表示できるものがないようです。

透明度が適切に機能している状態で、透明なPNGをReportLabキャンバスに合成した人はいますか?ありがとう!

4

3 に答える 3

2

mask='auto'reportlab 3.1.8 で動作しなくなったことがわかりました。ドキュメントでは、マスクしたい値を渡すように言われています。だから今私にとってうまくいくのはmask=[0, 2, 0, 2, 0, 2, ]. 基本的には、この `mask=[red_start, red_end, green_start, green_end, blue_start, blue_end, ] のようになります。

mask パラメータを使用すると、透明なイメージを作成できます。6 つの数値を取り、マスク アウトまたは透明として扱われる RGB 値の範囲を定義します。たとえば、[0,2,40,42,136,139] を使用すると、赤の値が 0 または 1、緑の値が 40 または 41、青の値が 136、137、または 138 (0 ~ 255 のスケール) のピクセルがマスクされます。 . 現在、どの色が「透明」または背景色であるかを知るのはあなたの仕事です。

更新: これは、適切な解決策である、rgb(0, 0, 0)またはrgb(1, 1, 1)明らかに適切ではない可能性のあるものをマスクします。私の問題は、灰色の色空間を持つ png 画像をアップロードする人々でした。そのため、画像の色空間を検出する方法を見つける必要があります。そのマスクをグレースペース画像にのみ適用します。

于 2015-02-07T17:43:38.990 に答える
1

ReportLab は PIL を使用して画像を管理します。現在、PIL トランクには透過 PNG をサポートするためのパッチが適用されていますが、安定したパッケージが必要な場合は 1.1.6 のリリースを待つ必要があります。

于 2009-08-21T10:00:56.303 に答える