Pillow 中文文档 — Pillow v2.4.0 (PIL fork)https://pillow-cn.readthedocs.io/zh_CN/latest/#pillow
from PIL import Image
class PicString:
# 内置函数:类都会拥有基础函数
# __init__ 初始化函数,生命周期优先级最高,实例化对象的时候自调用
# 类函数:特殊函数,self关键字(this=类对象),必须填,缺省函数(不用赋值)
def __init__(self):
self.pic_path = r'.\pic.png'
# list函数 把字符串序列抓换成list列表序列
# 灰色:0黑-255白,字符独特,成像效果越差
self.char_list = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.") # 字符列表
self.charPic = ''
# 自定义函数
def openPic(self):
pic = Image.open(self.pic_path) # 打开
# print(pic.size)
pic = pic.resize((int(pic.size[0] / 3), int(pic.size[1] / 3)), Image.NEAREST) # 重置大小 1.w,h 2.质量
# print(pic.size)
return pic
# 获取图片的像素值
def getPicPixel(self, pic):
for y in range(0, pic.size[1]): # height
for x in range(0, pic.size[0]): # length
# pixel (R:202, G:189, B:195, a:255)
pixel = pic.getpixel((x, y)) # 获取像素
# 解包:*() *[] 分离序列元素 *(r,g,b,a) = r,g,b,a
char = self.getPicGray(*pixel) # 计算灰色
self.charPic += char
else:
self.charPic += '\n' # 走一行像素来一个换行
else:
return self.charPic
# 获取图片某格像素的灰色值
def getPicGray(self, r, g, b, a=256):
# (rgb)不透明,有背景 (rgba)透明,256
if a == 0: # 透明,返回空白符
return ' '
# 灰色
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
# 灰色 0~255:字符 len=70
# 系数:256/len(char_list)
# indxe:gray / 系数
index = int(gray / (256 / len(self.char_list)))
char = self.char_list[index]
# print(char)
return char
# 保存
def savePic(self, charPic):
# file存储
# open(1.path 2.模式 3.编码) 打开\创建文件
file = open('./output.txt', mode='w', encoding='utf-8')
file.write(charPic) # 写数据
file.flush() # 清理缓存
file.close() # 关闭文件
print('END!SUCCESS!', file)
# # class类的实例对象
picStr = PicString()
picStr.savePic(picStr.getPicPixel(picStr.openPic()))
# picStr.openPic()
代码中用到的图片
运行结果 [要使用记事本打开, 在"格式"->"字体"中把字体改为"宋体"]
下边带一张用了我一下午也没搞明白为什么的图片
下载下来时后缀是webp, 我改成了png, 无法用于该代码
不相信的可以试一下, 如果成功了, 那可能就是成功了