Pillow模块

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, 无法用于该代码

 不相信的可以试一下, 如果成功了, 那可能就是成功了

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值