2015-09-01 15:10:29 +02:00

124 lines
2.6 KiB
Python

#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
import sys, os
try:
from PIL import Image
except ImportError as err:
sys.stderr.write(str(err) + '\n')
sys.exit(1)
def msg_error(string):
sys.stderr.write(str(string) + '\n')
class Img_to_schem():
def __init__(self,Filein, FileOut):
self.__Image = Filein
self.__fileOut = FileOut
self.__pixels = []
self.img = None
self.parcours = dict()
self.nodes = dict()
def load(self):
try:
self.img = Image.open(self.__Image)
self.__pixels = self.img.load()
except Exception as err:
msg_error(err)
sys.exit(1)
def get_size(self):
return self.img.size
def get_mode(self):
return self.img.mode
def get_format(self):
return self.img.format
def get_pixel(self, x, y):
return self.__pixels[x, y]
def set_nodes(self):
nb = 0
for i in range(self.img.size[0]):
color = self.__pixels[i, 0]
if color == self.__pixels[0, 0]:
nb += 1
if nb == 2:
break
self.nodes[color] = i
def get_nodes(self, color):
return self.nodes[color]
def set_parcours(self, x):
data = []
for z in range(5):
for y in range(10):
color = self.__pixels[x, y+(z*10)+5]
node = self.get_nodes(color)
if node != 0:
data.append({"x":x,"y":y,"z":z,"n":node})
self.parcours[x] = data
def serialize(self):
data = "return {"
for l, t in self.parcours.iteritems():
#{["1"]= {
data = "%s [\"%s\"] = {" % (data, l)
for n in t:
#{["y"]= 2, ["x"]= 3, ["node"]= "node1"}
d = '{x=%d,y=%d,z=%d,node=%d},' % (n["x"], n["y"], n["z"], n["n"])
data = "%s %s" % (data, d)
data += "},"
#["D"] = {{ {x=0,y=0,z=0},"default:mese"} },
data = "%s }" % data
try:
f = open(self.__fileOut, "w")
except Exception as err:
msg_error(err)
sys.exit(1)
f.write(data)
f.close()
def Main(FileImg, FileOut):
print("process...")
img = Img_to_schem(FileImg, FileOut)
img.load()
print("Size:%sX%s" % img.get_size())
print("Mode:%s" % img.get_mode())
if img.get_mode() != "P":
msg_error("Erreur, not 10 color")
sys.exit(1)
print("Format:%s" % img.get_format())
img.set_nodes()
for x in range(img.get_size()[0]):
img.set_parcours(x)
img.serialize()
if __name__ == "__main__":
if len(sys.argv) == 3:
FileImg = sys.argv[1]
FileOut = sys.argv[2]
if not os.path.exists(FileImg) or not FileImg.endswith(".bmp"):
msg_error("Bad argument, param 1 must be image.bmp and exited.")
sys.exit(1)
if not FileOut.endswith(".txt"):
msg_error("File Ext must be .txt.")
sys.exit(1)
Main(FileImg, FileOut)
else:
msg_error("Bad argument, exec %s image.bmp file.txt." % sys.argv[0])
sys.exit(1)