Symfoware

Symfowareについての考察blog

FreeBSD 10 + Python + pillowで透過pngの合成

php + GDで行ったことをPythonでもやってみます。
PHP - GDで透過pngの合成



pillowのインストール



Pythonで画像合成といえばPython Imaging Library (PIL)が有名でしたが、
最近は後継のpillowがメジャーだと思います。

pkg searchしてみると見つかりました。


# pkg search pillow
py27-pillow-2.6.0




pkg installでインストール実行。


# pkg install py27-pillow



from PIL import Imageが成功すれば、インストール完了です。




合成する画像



以前と同じもので試してみました。

元画像

498_01.png


上書きする画像

498_02.png



最初のサンプルはこのようになりました。


  1. # -*- coding:utf-8 -*-
  2. from PIL import Image
  3. layer1 = Image.open( 'sample.png' )
  4. layer2 = Image.open( 'riboon.png' )
  5. layer1.paste(layer2, (0,0), layer2)
  6. layer1.save('result.png')




実行してみると、画像は出力されたのですが

498_03.png


透過部分が綺麗に合成されていません。

498_04.png





alpha_composite



本家のマニュアルを見てみます。
http://pillow.readthedocs.org/en/latest/reference/Image.html

alpha_compositeが使えそう。

ただし、指定する2つの画像は同じ大きさじゃないと駄目です。
一旦上書きする画像を、元画像と同じ大きさの透過してある画像に上書き。

作成した同じ大きさの上書き用画像を重ねる。としてやります。


  1. # -*- coding:utf-8 -*-
  2. from PIL import Image
  3. layer1 = Image.open( 'sample.png' )
  4. layer2 = Image.open( 'riboon.png' )
  5. # layer1と同じ大きさの画像を全面透過で作成
  6. c = Image.new('RGBA', layer1.size, (255, 255,255, 0))
  7. c.paste(layer2, (0,0), layer2)
  8. result = Image.alpha_composite(layer1, c)
  9. result.save('result.png')




狙い通りの画像が得られました。

498_05.png


498_06.png



関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/11/03(月) 18:40:56|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python + Pillow(PIL)で、透過したpng画像を作成する | ホーム | MeCabのPythonバインディングでユーザー辞書を使用する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1531-0c877ab4
この記事にトラックバックする(FC2ブログユーザー)