Last active
May 8, 2016 09:29
-
-
Save itpcc/9aea5f40c0ae4f9ca952a1d05f11ad0c to your computer and use it in GitHub Desktop.
ตัวอย่างการใช้ PILlow https://github.com/itpcc/FPGA-IA-Journy-game/blob/master/image2verilog-color.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- coding: utf-8 -*- | |
import os | |
import Tkinter | |
import tkFileDialog | |
from PIL import Image | |
import ImageDraw | |
import PIL.ImageOps | |
__DEFAULT_VAR_NAME__ = "var1" | |
__IS_MARK_CENTER__ = False | |
__INVERT_COLOR__ = False | |
def main(): | |
try: | |
Tkinter.Tk().withdraw() # Close the root window | |
in_path = str(tkFileDialog.askopenfilename()) | |
print("Opening: {0}".format(in_path)) | |
outputpath = str(tkFileDialog.asksaveasfilename()) | |
im = Image.open(in_path) | |
w, h = im.size | |
outputpath = outputpath.format(width=w, w=w, height=h, h=h) | |
with open(outputpath, 'w') as f: | |
print("Output: {0}".format(outputpath)) | |
variableName = raw_input('Type variable name (enter to use "{0}" as variable name) :'.format(__DEFAULT_VAR_NAME__)).strip() | |
if variableName == "": | |
variableName = __DEFAULT_VAR_NAME__ | |
if __INVERT_COLOR__: | |
r,g,b,a = im.split() | |
rgb_image = Image.merge('RGB', (r,g,b)) | |
inverted_image = PIL.ImageOps.invert(rgb_image) | |
r2,g2,b2 = inverted_image.split() | |
im = Image.merge('RGBA', (r2,g2,b2,a)) | |
rgb_im = im.convert('RGBA') | |
resultImage = Image.new('RGBA', (w, h)) | |
draw = ImageDraw.Draw(resultImage) | |
# f.write("reg [{3}:0] {0}[{1}] = {2} ".format(variableName, h, '{', (w*2)-1 )) | |
f.write("module {0}(\n".format(variableName)) | |
f.write(" input clk,\n") | |
f.write(" input wire [9:0] characterPositionX,\n") | |
f.write(" input wire [8:0] characterPositionY,\n") | |
f.write(" input wire [9:0] drawingPositionX,\n") | |
f.write(" input wire [8:0] drawingPositionY,\n") | |
f.write(" output reg [2:0] rgb\n") | |
f.write(");\n") | |
f.write(" reg [9:0] x;\n") | |
f.write(" reg [9:0] y;\n") | |
f.write(" initial begin\n") | |
f.write(" x = 'd0;\n") | |
f.write(" y = 'd0;\n") | |
f.write(" end\n") | |
f.write("\n") | |
f.write(" always @(posedge clk) begin\n") | |
f.write(" x <= (drawingPositionX - characterPositionX + {0});\n".format(int(w/2)+1)) | |
f.write(" y <= (drawingPositionY - characterPositionY + {0});\n".format(int(h/2)+1)) | |
if(__IS_MARK_CENTER__): | |
f.write(" if("); | |
f.write("x == {0:d} && y == {1:d} || ".format((w/2), (h/2))) | |
f.write("x == {0:d} && y == {1:d} || ".format((w/2), (h/2)-1)) | |
f.write("x == {0:d} && y == {1:d} || ".format((w/2), (h/2)+1)) | |
f.write("x == {0:d} && y == {1:d} || ".format((w/2)-1, (h/2))) | |
f.write("x == {0:d} && y == {1:d} || ".format((w/2)-1, (h/2)-1)) | |
f.write("x == {0:d} && y == {1:d} || ".format((w/2)-1, (h/2)+1)) | |
f.write("x == {0:d} && y == {1:d} || ".format((w/2)+1, (h/2))) | |
f.write("x == {0:d} && y == {1:d} || ".format((w/2)+1, (h/2)-1)) | |
f.write("x == {0:d} && y == {1:d} )".format((w/2)+1, (h/2)+1)) | |
f.write("\tbegin\trgb <= 3'b010;\tend\n") | |
i = 0 | |
for y in xrange(1,h): | |
# f.write("{0}'b".format((w*2))) | |
for x in xrange(1,w): | |
r, g, b, alpha = rgb_im.getpixel((x, y)) | |
# grayScale = r * 299.0/1000 + g * 587.0/1000 + b * 114.0/1000 | |
# grayScale = int(grayScale/256*4) | |
# grayScale = int(grayScale/256*8) | |
grayScale = 0; | |
if r > 125: | |
grayScale += 4 | |
if g > 125: | |
grayScale += 2 | |
if b > 125: | |
grayScale += 1 | |
print "Pixel: ({0},{1}) = ({2},{3},{4}, {6}) => {5:03b}".format(x, y, r, g, b, grayScale, alpha) | |
draw.point((x,y), (255 if r > 125 else 0, 255 if g > 125 else 0, 255 if b > 125 else 0, alpha)) | |
# f.write("{0}{1}".format('1' if grayScale >= 2 else '0', '1' if grayScale%2 == 1 else '0')) | |
if(alpha > 128 and grayScale > 0) : | |
f.write("\t\t") | |
if(__IS_MARK_CENTER__ or i > 0): f.write("else ") | |
f.write("if(x=={0} && y=={1}) begin\trgb <= 3'b{2}{3}{4}; end\n".format(x, y, 1 if r > 125 else 0, 1 if g > 125 else 0, 1 if b > 125 else 0)) | |
i += 1 | |
f.write(" else begin rgb <= 3'b000; end// Width: {0}, Height: {1} From: {2}\n".format(w,h,in_path)) | |
f.write(" end\nendmodule\n") | |
f.close() | |
resultImage.save(outputpath+".png", 'PNG') | |
os.system("start "+outputpath) | |
os.system("start "+outputpath+".png") | |
except Exception, e: | |
print e | |
if __name__ == "__main__": | |
main() | |
# im = Image.open('image.gif') | |
# rgb_im = im.convert('RGB') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment