作为Python学习入门级小脚本,简单有趣。
代码如下:
from PIL import Image # 导入python图像处理库PIL
# 字符画使用的字符集,通过list()把元组转化为列表
CHARSET = list('$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`\'.')
# 字符画的宽度
WIDTH = 200
# 字符画的高度
HIGHT = 50
# 根据像素点的RGB值转化为字符
# @param red 红
# @param green 绿
# @param blue 蓝
# @return CHARSET[character_index] 像素点对应字符
def get_character(red, green, blue):
charset_length = len(CHARSET) # 获取字符集列表长度
pixel_grayscaness = 0.3 * red + 0.59 * green + 0.11 * blue # 计算像素点灰度值
character_index = int(pixel_grayscaness / 256 * (charset_length - 1)) # 计算字符索引
return CHARSET[character_index]
if __name__ == '__main__':
print('字符画转换脚本开始执行...')
image_path = 'E:/Workspace/PyCharm/test01/images/miaone.jpg' # 图像路径
image = Image.open(image_path) # 获取图像对象
image = image.resize((WIDTH, HIGHT)) # 改变图像尺寸
character_image = '' # 初始化字符图像
# 遍历每个像素
for i in range(HIGHT):
for j in range(WIDTH):
character_image += get_character(*image.getpixel((j, i))) # 写入像素点对应字符
character_image += '\n'
with open("E:/Workspace/PyCharm/test01/images/miaone.txt", 'w') as f:
f.write(character_image) # 将字符图像写入文件
print('字符画转换脚本执行完毕。')
效果:
原图:
转换字符画:
呐呐呐~