工作原理:
先将图片每个像素的hsv(色相,饱和度,明度)值转化为可读取对象,使用到PIL的Image方法:
from PIL import Imageimg = Image.open('test.png')hsv = img.convert('HSV').load()
再将图像按v用取平均值的方法进行压缩,最后根据压缩后图像的每个像素点的v值转换成字符进行输出
运行效果:
原图:
转化后:
完整代码:
scale表示图片的压缩倍率,压缩后图像的宽度和高度都为原图的除以scale
fit_table表示转化后的图片由哪些字符构成,按明度从低到高排列,长度应在1-255之间,长度越长图像对比度越高,画质越好
from PIL import Imagefrom math import ceil# 图片压缩倍率scale = 1# 获取图像hsvimg = Image.open('test.png')hsv = img.convert('HSV').load()new_img = [[0 for i in range(ceil(img.width / scale))] for x in range(ceil(img.height / scale))]# 图像压缩for x in range(0, img.width, scale):for y in range(0, img.height, scale):_v = 0num = 0for x1 in range(scale):for y1 in range(scale):if x + x1 < img.width and y + y1 < img.height:_v += hsv[x + x1, y + y1][2]num += 1new_img[y // scale][x // scale] = _v // num# 转化字符(明度从低到高排列)fit_table = ['魍', '恼', '且', '不', '一']text = ''# 转文本for y in new_img:for x in y:text += fit_table[x // (255 // len(fit_table) + 1)]text += '\n'print(text)