DAY1 图片转化为字符画
2018-03-01 17:15 每天都在进步 阅读(539) 评论(0) 收藏 举报思路:
- 创建一个不重复的字符列表,灰度值小(暗)的用列表开头的符号,灰度值大(亮)的用列表末尾的符号
- 利用PIL库中的Image模块对图像进行处理,然后直接将每个像素点的灰度值与字符集建立映射。 PIL库的使用见http://blog.csdn.net/column/details/pythonpil.html
操作步骤:
- 生成字符串集:
char_list = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
length = len(char_list) - 定义映射函数:
def get_char(image_file): image_file = image_file.convert("L")#转换为黑白图片,参数"L"表示黑白模式 char = '' for h in range(0,image_file.size[1]): #size属性表示图片的分辨率,'0'为横向大小,'1'为纵向 for w in range(0,image_file.size[0]): gray = image_file.getpixel((w,h)) #返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组 char = char + char_list[int(((length-1)*gray)/256)]#建立灰度与字符集的映射 char = char+'\r\n' return char
完整代码如下:
1 from PIL import Image 2 char_list = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") 3 length = len(char_list) 4 def get_char(image_file): 5 image_file = image_file.convert("L")#转换为黑白图片,参数"L"表示黑白模式 6 char = '' 7 for h in range(0,image_file.size[1]): #size属性表示图片的分辨率,'0'为横向大小,'1'为纵向 8 for w in range(0,image_file.size[0]): 9 gray = image_file.getpixel((w,h)) #返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组 10 char = char + char_list[int(((length-1)*gray)/256)]#建立灰度与字符集的映射 11 char = char+'\r\n' 12 return char 13 fp = open(u'暴走.jpg','rb') 14 image_file = Image.open(fp) 15 image_file=image_file.resize((int(image_file.size[0]*0.75), int(image_file.size[1]*0.5)))#调整图片大小 16 print (u'Info:',image_file.size[0],' ',image_file.size[1],' ',length) 17 18 tmp = open('tmp.txt','w') 19 tmp.write(get_char(image_file)) 20 tmp.close()
效果如下:

浙公网安备 33010602011771号