はじめに
うたがわきき です。
Pythonで、コマンドラインの暗くて狭い世界を抜けだそうキャンペーン(そんなものはない)の一環として、今回は画像処理をしてみようと思います。
まずはこの画像を用意します。赤蛮奇です。誰が何と言おうと赤蛮奇です。
この画像にあんなことやこんなことをしてみようと思います。
ここに書いてあることを再現するときには、上の画像をダウンロードするといいと思います。
その前に
Pythonの導入は済んだか? 小僧。ここからPython2.7.5(3.xではない)をダウンロード、インストールしてください。
続いて、ここから、Pillowのwin32、py2.7と書いてあるものを導入してください。
64bit環境向け
64bit環境の方は、同じサイトからamd64、py2.7と書いてあるものを導入してください。
次に
オメデトウ。これで今日から画像処理プログラミングができるね!
コードの初めに、
from PIL import Image
と書けば、画像処理の準備は完了です。やったぜ。
まずは基本形
from PIL import Image img = Image.open('sekibanki.png') print img.size print img.format print img.mode
実行結果
(24,24) PNG RGBA
そんなことはどうでもいい
今日作るのはこれです。
\デュン!/
ズバリ、読み込んだ画像をHTMLで表す、という何とも使い道の分からないモノです。
意外と簡単にできました。
コード
# -*- coding: utf-8 -*- from PIL import Image img = Image.open("sekibanki.png").convert('RGB') size = img.size f = open("output.htm","w") ch = '■' # 置き換える文字 f.write('<div style="font-size:50%;">') for y in range(size[1]): for x in range(size[0]): r,g,b = img.getpixel((x,y)) f.write('<span style="color:#%02x%02x%02x;">%s</span>'%(r,g,b,ch)) f.write('<br>') f.write('</div>')
解説
画像を開いてRGB形式に変換。透過とかされても分からないからね。
変数sizeに画像のサイズを格納。できたHTMLはoutput.htmに出力することにするよ。
変数chは置き換える文字。そのまんまだね。
<div style="font-size:50%;"> としてあるところは、各自でいじっていいです。
本当は、<font>タグを使いたかったけど、いかんせん古めかしいんだよなあ。ちぇっ。
カラーコードは16進数で表すからね。
できあがったのが、さっきの。
おまけ
色反転
from PIL import Image img = Image.open("sekibanki.png").convert('RGB') size = img.size newimg = Image.new('RGB',size) for x in range(size[0]): for y in range(size[1]): r,g,b = img.getpixel((x,y)) newimg.putpixel((x,y),(255-r,255-b,255-g)) newimg.save("sekibanki_.png")
できあがったもの
わりとわかりやすいね。
赤みをかける
from PIL import Image img = Image.open("sekibanki.png").convert('RGB') size = img.size newimg = Image.new('RGB',size) for x in range(size[0]): for y in range(size[1]): r,g,b = img.getpixel((x,y)) newimg.putpixel((x,y),(r+150,b,g)) newimg.save("sekibanki_.png")
できあがったもの
これも分かりやすい。
セピア調
自分でさがしてください
参考にしたサイト
画像処理 - python入門から応用までの学習サイト
Python による画像処理
Python Imaging Library (PIL) 利用ノート
Python Image Library (PIL) で色抽出 - deeeet's blog
あとがき
もっと効率的なコードが書きたい