版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/okm6666/article/details/78646428
通过PIL库进行操作,将图片中每个像素与字符集中的元素进行一一对应,实现将图片转换为字符串的效果。实现后的效果:
首先导入Image模块,用于对图像进行操作,并创建字符库用于替换,从字符的密集进行排序
from PIL import Image
#创建用于替换的字符集
chs = list('''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,. ''')
创建通过获取像素的RGB值后进行与字符间转换的方法,在透明时返回空格进行填充,再将其他参数进行转换,按照转换后的比值确定替换字符的密集程度。
def get_char(r, g, b, alpha=256):
if alpha == 0:
return ' '
length = len(chs)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unit = 256 / length
return chs[(int)(gray / unit)]*2
通过打开图片重新设置图片大小,进行遍历获取RGB值,通过字符串不断添加RGB值转换后的字符。最后将字符串写入文件中。getpixel方法的参数按照以图片左上角为原点,向左为X轴正方向,向下为Y轴正方向进行设置。
txt = ''
with Image.open("1.jpg") as im:
im = im.resize((60, 60), Image.NEAREST) #第二个参数为缩放图片的质量
width, height = im.size
for i in range(height):
for j in range(width):
txt += get_char(*im.getpixel((j, i)))
txt += '\n'
with open('wm.txt' ,'w') as t:
t.write(txt)