|
@@ -0,0 +1,192 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+
|
|
|
+from PIL import Image
|
|
|
+from pprint import pprint
|
|
|
+
|
|
|
+import argparse, sys, time, pickle
|
|
|
+
|
|
|
+ON = 'X'
|
|
|
+OFF = '.'
|
|
|
+EMPTY = False
|
|
|
+hexbug = True
|
|
|
+
|
|
|
+# 128
|
|
|
+INTENSITY = 64
|
|
|
+
|
|
|
+parser = argparse.ArgumentParser( description='Display Graphical Image.')
|
|
|
+parser.add_argument( 'FILENAME', help='Image file to process' )
|
|
|
+parser.add_argument( '--hex', help='Display output in hexadecimal', action="store_true" )
|
|
|
+parser.add_argument( '--all', help='Display all of the image.', action="store_true" )
|
|
|
+parser.add_argument( '-d', help='Display image.', action="store_true" )
|
|
|
+args = parser.parse_args()
|
|
|
+
|
|
|
+filename = args.FILENAME
|
|
|
+
|
|
|
+print("Loading", filename)
|
|
|
+
|
|
|
+im = Image.open(filename)
|
|
|
+
|
|
|
+# pix = im.convert('RGB') # this is even worse. No!
|
|
|
+pix = im.load()
|
|
|
+
|
|
|
+size = im.size
|
|
|
+print("size:",size[0],"x",size[1])
|
|
|
+
|
|
|
+# print im.format, im.size, im.mode, im.info
|
|
|
+
|
|
|
+if im.mode == 'P':
|
|
|
+ pal = im.getpalette()
|
|
|
+ # print "Palette is:", pal
|
|
|
+
|
|
|
+def img_point(x,y):
|
|
|
+ global pix
|
|
|
+ return pix[x,y]
|
|
|
+ # return pix.getpixel((x,y))
|
|
|
+
|
|
|
+def img_average(x,y):
|
|
|
+ global im, pal
|
|
|
+
|
|
|
+ rgb = img_point(x,y)
|
|
|
+ # Image is in palette mode, convert from palette
|
|
|
+ # index to RGB value.
|
|
|
+
|
|
|
+ if im.mode == 'P':
|
|
|
+ # print "rgb=",rgb
|
|
|
+ rgb = pal[rgb*3:(rgb+1)*3]
|
|
|
+ # print "rgb now:",rgb
|
|
|
+
|
|
|
+ if im.mode == 'I':
|
|
|
+ return rgb >> 8
|
|
|
+
|
|
|
+ return int( ( rgb[0] + rgb[1] + rgb[2] ) / 3 )
|
|
|
+
|
|
|
+def is_set(x,y):
|
|
|
+ avg = img_average(x,y)
|
|
|
+ return (avg < INTENSITY )
|
|
|
+
|
|
|
+# This has start and end ranges to their max values.
|
|
|
+sx = 0
|
|
|
+ex = size[0]
|
|
|
+sy = 0
|
|
|
+ey = size[1]
|
|
|
+
|
|
|
+total = 0
|
|
|
+
|
|
|
+def scan_image():
|
|
|
+ global sx, ex, sy, ey, total
|
|
|
+
|
|
|
+ total = 0
|
|
|
+ # Max out the start and end points. We adjust
|
|
|
+ # as we find points within the image.
|
|
|
+
|
|
|
+ sx = size[0]; ex = 0
|
|
|
+ sy = size[1]; ey = 0
|
|
|
+
|
|
|
+ for y in range( 0,size[1] ):
|
|
|
+ for x in range( 0,size[0] ):
|
|
|
+ # c = img_point(x,y)
|
|
|
+ pnt_is = is_set(x,y)
|
|
|
+ if (pnt_is):
|
|
|
+ total += 1
|
|
|
+ # print (x,y), (sx,ex,sy,ey)
|
|
|
+ if x < sx:
|
|
|
+ sx = x
|
|
|
+ if x > ex:
|
|
|
+ ex = x
|
|
|
+ if y < sy:
|
|
|
+ sy = y
|
|
|
+ if y > ey:
|
|
|
+ ey = y
|
|
|
+
|
|
|
+ #print (sx,ex,sy,ey)
|
|
|
+ # give us a little border to work with
|
|
|
+ if sx > 0:
|
|
|
+ sx -= 1
|
|
|
+ if ex < size[0]:
|
|
|
+ ex += 1
|
|
|
+
|
|
|
+ if sy > 0:
|
|
|
+ sy -= 1
|
|
|
+ if ey < size[1]:
|
|
|
+ ey += 1
|
|
|
+
|
|
|
+ #print (sx,ex,sy,ey)
|
|
|
+ return(sx,sy,ex,ey)
|
|
|
+
|
|
|
+scan_image()
|
|
|
+
|
|
|
+print("Character within ({0},{1}) - ({2},{3}) total {4} pixels...".format( sx, sy, ex, ey, total ))
|
|
|
+
|
|
|
+
|
|
|
+def display_image():
|
|
|
+ global args
|
|
|
+
|
|
|
+ if args.all:
|
|
|
+ for y in range(0,size[1]):
|
|
|
+ s = ''
|
|
|
+ for x in range(0,size[0]):
|
|
|
+ if args.hex:
|
|
|
+ s += '{0:02X}'.format( img_average(x,y))
|
|
|
+ else:
|
|
|
+ if is_set(x,y):
|
|
|
+ s += ON
|
|
|
+ else:
|
|
|
+ s += OFF
|
|
|
+ print(s)
|
|
|
+
|
|
|
+ else:
|
|
|
+ for y in range(sy,ey):
|
|
|
+ s = ''
|
|
|
+ for x in range(sx,ex):
|
|
|
+ if args.hex:
|
|
|
+ s += '{0:02X}'.format( img_average(x,y) )
|
|
|
+ else:
|
|
|
+ if is_set(x,y):
|
|
|
+ s += ON
|
|
|
+ else:
|
|
|
+ s += OFF
|
|
|
+ print(s)
|
|
|
+
|
|
|
+ print(" --")
|
|
|
+
|
|
|
+def save_image():
|
|
|
+ global args
|
|
|
+ result = []
|
|
|
+ if args.all:
|
|
|
+ for y in range(0,size[1]):
|
|
|
+ s = ''
|
|
|
+ for x in range(0,size[0]):
|
|
|
+ if args.hex:
|
|
|
+ s += '{0:02X}'.format( img_average(x,y))
|
|
|
+ else:
|
|
|
+ if is_set(x,y):
|
|
|
+ s += ON
|
|
|
+ else:
|
|
|
+ s += OFF
|
|
|
+ result.append(s)
|
|
|
+
|
|
|
+ else:
|
|
|
+ for y in range(sy,ey):
|
|
|
+ s = ''
|
|
|
+ for x in range(sx,ex):
|
|
|
+ if args.hex:
|
|
|
+ s += '{0:02X}'.format( img_average(x,y) )
|
|
|
+ else:
|
|
|
+ if is_set(x,y):
|
|
|
+ s += ON
|
|
|
+ else:
|
|
|
+ s += OFF
|
|
|
+ result.append(s)
|
|
|
+
|
|
|
+ return result
|
|
|
+
|
|
|
+display_image()
|
|
|
+img_s = save_image()
|
|
|
+img_s.append('net')
|
|
|
+#img_s1 = filter_image(img_s)
|
|
|
+# print "border:",border
|
|
|
+
|
|
|
+with open('out.txt', 'w') as f:
|
|
|
+ for e in img_s
|
|
|
+ f.write(e)
|
|
|
+
|