petitviolet_blog

@petitviolet blog

Python Image Library(PIL)の使い方

またしてもpython chanllengeです.
PILを用いることになったのでお勉強.
今回はコードとして全部書いてしまいました.

PILを用意

easy_install PIL

もしくは

pip install PIL

とかでいけるはずです.
easy_installとかpipについてはググッてください.

用意した物

sample.jpgです.

img.py

# -*- encoding:utf-8 -*-
# こうではなく
# import PIL
import Image

def img(filename='sample.jpg'):
    # sample.jpgを開く
    im = Image.open(filename)
    # sample.jpgを閲覧
    im.show()
    data = im.getdata() # 画素をイテレータとして得る
  for d in data:
        print d,
    # sample.jpgのフォーマット, モード, サイズ, 情報を取得
    print 'format =', im.format
    print 'mode =', im.mode
    print 'size =', im.size
    print 'info =', im.info
    # sample.jpgをsample2.jpgとしてjpeg形式で保存(png等も指定できる)
    im.save('sample2.jpg', 'jpeg')
    # sample.jpgを複製して閲覧
    im.copy().show()
    # 新しく画像を作成(形式, サイズ, 第一引数で指定したcolor)の3つの引数
    new_im = Image.new('RGB', (500, 633), (128, 100, 200))
    # 新しく作成した画像をnew_sample.jpgとして保存
    new_im.save('new_sample.jpg', 'jpeg')
    # new_sample.jpgを開く
    ni = Image.open('new_sample.jpg')
    # sample.jpgとnew_sample.jpgを0.5ずつの割合でブレンド
    bl = Image.blend(im, new_im, 0.5)
    # ブレンドしたものをsample3.jpgとして保存
    bl.save('sample3.jpg', 'png')
    # ブレンドした画像のヒストグラムを表示
    print bl.histogram()
    # ブレンドした画像をRGBで分解してそれぞれ表示
    r, g, b = bl.split()
    r.show()
    g.show()
    b.show()
    # ブレンドした画像を2値化して表示
    bl.convert('1').show()
    # ブレンドした画像をグレースケール化して表示
    bl.convert('L').show()
    # ブレンドした画像を100*100にサイズ変換して文字列化する
    st = bl.resize((100, 100)).tostring()
    print st
    # 文字列から画像を起こす
    # 元画像より大きなサイズにして起こすことは出来ない
    im_st = Image.fromstring('RGB', (100, 100), st)
    im_st.show()

if __name__ == '__main__':
    img()

他にも切り貼りしたりも出来るようです.
すっごい簡単に画像処理ができてしまうみたい強力なライブラリでした.