#2【Python】PILで3bit画像を作成してみる

《目次》

《内容》

今回はPythonの画像処理ライブラリ「PIL」を使用し3bit(8色)の画像を作成してみたいと思います.
紹介するものより,効率のよいやり方があるかもしれません.
以下の画像を3bit画像にしていきたいと思います.

f:id:tqdm8192:20190916154758j:plain
処理前
画像はこちらのサイトから利用しました.
pixabay.com

《プログラム》
from PIL import Image

img1 = Image.open("img1.jpg")
rgb_im1 = img1.convert('RGB')
size = rgb_im1.size
img2 = Image.new('RGB',size)

for x in range(size[0]):
    for y in range(size[1]):
        r1,g1,b1 = img1.getpixel((x,y))
        r2 = 255
        g2 = 255
        b2 = 255
        if r1<127 and g1<127 and b1<127:
            r2 = 0
            g2 = 0
            b2 = 0
        if r1<127 and g1<127 and b1>=127:
            r2 = 0
            g2 = 0
            b2 = 255
        if r1<127 and g1>=127 and b1<127:
            r2 = 0
            g2 = 255
            b2 = 0
        if r1<127 and g1>=127 and b1>=127:
            r2 = 0
            g2 = 255
            b2 = 255
        if r1>=127 and g1<127 and b1<127:
            r2 = 255
            g2 = 0
            b2 = 0
        if r1>=127 and g1<127 and b1>=127:
            r2 = 255
            g2 = 0
            b2 = 255
        if r1>=127 and g1>=127 and b1<127:
            r2 = 255
            g2 = 255
            b2 = 0
        if r1>=127 and g1>=127 and b1>=127:
            r2 = 250
            g2 = 250
            b2 = 250
        if r1>=127 and g1>=127 and b1>=127:
            r2 = 250
            g2 = 250
            b2 = 250
        img1.putpixel((x,y),(r2,g2,b2,0))
img1.show()
img1.save("3bit.jpg")

実行後以下のような画像になりました.少々分かりにくいですが,8色のみの画像になっているようです.
ちなみに8色とは,黒,白,赤,緑,青,マゼンタ,イエロー,シアンです.

f:id:tqdm8192:20190916155140j:plain
処理後

《プチ解説》
  • img1.show()

これで処理後の画像を表示させています.

  • img1.save("3bit.jpg")

これで3bit.jpgという名前で画像を保存しています.

  • rgb_im1 = img1.convert('RGB')

詳しいことはわかりませんが,処理前の画像をPILで扱うために,RGBに変換しているようです.

  • size = rgb_im1.size

こちらは画像のサイズを取得しています.

《今後の課題》
  • Tkinterを使用しGUIで処理できるようにしてみる.
  • もっと効率よく変換してみる.

今回は以上になります.アドバイスなどありましたら,コメントよりぜひお願いいたします.