投稿日: May 29, 2019 8:35:40 AM
よくよく見てるとRaspberry PiにはPILがプリインストールされている。
そうか、PILがもともと使えるのか。
PILっていうのは(Pillow)という画像編集モジュール。
かなりいろいろなことが出来る定番モジュールだったはず。
ちょいまえに画像からPythonスクリプトにデータ変換するためのものを作ったけどどうもよろしくないというか素直にバイナリにしたほうがいいんじゃないかと書いていたでしょう。それ、やりましょう。
img2bin.py
#!/usr/bin/python3
from PIL import Image
import argparse
p = argparse.ArgumentParser()
p.add_argument("inputFilePath")
p.add_argument("outputFilePath")
args = p.parse_args()
inputFileName = args.inputFilePath
outputFileName = args.outputFilePath
img = Image.open(inputFileName)
print( "size: " , img.size )
print( "mode: " , img.mode )
if img.mode == "RGBA":
f = open(outputFileName,"wb")
for y in range( img.height ):
for x in range( img.width ):
pix = img.getpixel((x,y))
f.write(bytes([pix[0],pix[1],pix[2],pix[3]]))
f.close()
else:
print("Currently only RGBA format suppoted")
print("done")
単純にピクセル情報をバイナリに書き出しているだけなので簡単。
PIL使えるのは大きいな。
使い方としては
./img2bin inputfilename outputfilename
ってかんじで。
outputfileはただのARGBのデータがベタに書かれたバイナリなので読み込んで好きに出来る。
実行するとこんな風に情報が出る。
画像のサイズは他で使うときに重要になるので…重要です(語彙
size: (128, 24)
mode: RGBA
done
pyg(PyGame)でこれを扱うにはこのようにする。
import pyg
with open("data.bin", "rb") as f:
data = f.read()
pyg.begin((200,200))
img = pyg.image.frombuffer(data,(128,64),"RGBA")
pyg.putImg( img, (0,0) )
pyg.update()
画像サイズをバイナリに仕込むという手もあるのだけど読み込んで使う側にルールが出来ちゃうので敢えて何もせず…。xmlかなにかに情報かいてやると全部まとめてパック出来るようなものがあるといいかもね(と次への布石がいまここに