2011年5月31日火曜日

バイト列を画像に変換する

目grepはできませんが、画像を作るくらいならできそうなのでやってみました。

入力を1バイトずつ、値に応じた色のピクセルに変換して画像を作成します。値と表示色の関係はbin2colorをいじると変更できます。

ひさびさにPythonを使ってみました。

#!/usr/bin/python

import sys
import os.path
import Image

argvs = sys.argv
argc = len(argvs)

if (argc != 3) :
print 'Usage : %s [input-file] [output-file]' % argvs[0]
quit()

in_file = argvs[1]
out_file = argvs[2]

filesize = os.path.getsize(in_file)

x = 160
y = filesize/x + 1

print 'filesize %d , x = %d, y = %d' % (filesize, x, y)


def bin2color(bin):
bin = ord(bin)
if bin == 0 :
return (255, 255, 255)
elif bin <= 0x80 :
return (255, 0, 0)
else :
return (0, 0, 0)

img = Image.new("RGB", (x, y), (255, 255, 255))

try:
f = open(in_file, "rb")
n = 0
while n < y-1:
line = f.read(x)
for i in range(x):
img.putpixel((i,n), bin2color(line[i]))
n = n + 1
line = f.read(filesize - (x * n))
for i in range(filesize - (x * n)):
img.putpixel((i,n), bin2color(line[i]))
finally:
f.close()

img.save(out_file, "BMP")

0 件のコメント:

コメントを投稿