Python 小把戏之图片转字符串
from PIL import Image
import argparse
import os
import time
import ctypes
parser = argparse.ArgumentParser(description="your script description")
parser.add_argument('-f', '--file')
parser.add_argument('-o', '--output')
parser.add_argument('--width', type = int, default = 100)
parser.add_argument('--height', type = int, default = 100)
args = parser.parse_args()
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
img_num = 0
def get_char(r,g,b,alpha = 256):
if alpha == 0:
return ' '
length = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unit = (256.0 + 1)/length
return ascii_char[int(gray/unit)]
def batch_rename(path):
global img_num
if (not os.path.isdir(path) and not os.path.isfile(path)):
return False
if os.path.isfile(path):
file_path = os.path.split(path)
lists = file_path[1].split('.')
file_ext = lists[-1]
img_ext = ['bmp', 'jpeg', 'gif', 'psd', 'png', 'jpg']
if file_ext in img_ext:
im = Image.open(path)
im.show()
im = im.resize((WIDTH,HEIGHT), Image.NEAREST)
txt = ""
img_num += 1
for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j,i)))
print(get_char(*im.getpixel((j,i))), end = ' ')
txt += '\n'
print(' ')
with open(lists[0] + '.txt','w') as f:
f.write(txt)
elif os.path.isdir(path):
for item in os.listdir(path):
batch_rename(os.path.join(path, item))
if __name__ == '__main__':
if IMG:
img_dir = IMG
else:
img_dir = '.'
start = time.time()
batch_rename(img_dir)
print('总共处理了 %s 张图片, 耗时 %4.2f' % (img_num, time.time() - start ))