pillowで画像の操作

■QRコードの再現にあたり画像を操作する。
QRコードをtkinterで再現するため、画像を操作できるライブラリpillowを試してみる。対象のQRコードの画像をプロパティで見ると、92×92のサイズだった。さらに21×21マスのQRコードなので、最も外側の白い部分を含めて、21 × 4 ピクセル + 4 ピクセル × 2(白枠分)として、1マスは4ピクセル四方の正方形と思われる。


この画像に対して、pillowのメソッドをいくつか使ってみる。
コードが下のもの。

from PIL import Image

img = Image.open('sample036_1.png')
xsize, ysiz = img.size
print(xsize)
print(ysiz)

print(img.getcolors())

part1 = img.crop((0, 0, 4, 4))
print(part1.size)
print(part1.getcolors())

part2 = img.crop((1, 5, 8, 6))
print(part2.size)
print(part2.getcolors())

part3 = img.crop((4, 4, 8, 8))
print(part3.size)
print(part3.getcolors())

実行結果が下のもの。

92ずつ表示されているので、縦、横のサイズが取得できていると思う。
さらに、色を取得するメソッドでは、該当の色のピクセル数と色の数字が表示されているよう。例えば、[(3744, 0), (4720, 255)] では、3744ピクセルが黒(0)で、4720ピクセル白(255)になっていることを示す。サイズから 92 × 92 = 8464 = 3744 + 4720 で、上の図は全8464ピクセルとなり、すべてのピクセルから色が取得されていることが分かる。

この画像をクロップで切り取ると該当部分だけの色を取得できる。cropメソッドの引数の四つの要素の始め2つが始点のx, yで、後2つが終点のx, yとなる。((0, 0, 4, 4))なら、左上の4ピクセル分の正方形を見ることになり、この部分はQRコードの白枠になるので、16ピクセル分がすべて白(255)となる。

とりあえずは、pillowのメソッドの確認をした。crop, getcolors を使えば、QRコードの画像からtkinterで再現させることができそう。