Symfoware

Symfowareについての考察blog

Python + Pillow(PIL)で、透過したpng画像を作成する

やりたいのは、例えばこんな画像

499_01.png

黒い文字の縁取り以外を透過させたい。

499_02.png



サンプル



元画像と同じサイズの透過画像を用意。
1ピクセルずつ読みながら、白以外のピクセルを用意した画像に転記します。


  1. # -*- coding:utf-8 -*-
  2. from PIL import Image
  3. # 透過したい画像を読み込み
  4. org = Image.open( 'original.png' )
  5. # 同じサイズの画像を作成
  6. trans = Image.new('RGBA', org.size, (0, 0, 0, 0))
  7. width = org.size[0]
  8. height = org.size[1]
  9. for x in xrange(width):
  10.     for y in xrange(height):
  11.         pixel = org.getpixel( (x, y) )
  12.         
  13.         # 白なら処理しない
  14.         if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
  15.             continue
  16.         
  17.         # 白以外なら、用意した画像にピクセルを書き込み
  18.         trans.putpixel( (x, y), pixel )
  19. # 透過画像を保存
  20. trans.save('trans.png')




できました。

499_03.png





合成に使用



作成した透過画像で、こちらと同様のことを行ってみます。

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



  1. # -*- coding:utf-8 -*-
  2. from PIL import Image
  3. layer1 = Image.open( 'sample.png' )
  4. layer2 = Image.open( 'trans.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')




縁取りが微妙ですが、一応狙い通りの動作になりました。

499_04.png



関連記事

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

  1. 2014/11/04(火) 22:38:14|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python + Pillow(PIL)で画像の回転を行う(rotate, transpose) | ホーム | FreeBSD 10 + Python + pillowで透過pngの合成>>

コメント

コメントの投稿


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

トラックバック

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