pillow模块


preface

Pillow(GITHUB链接)是一个对PIL友好的分支,PIL是一个Python图像处理库。

#安装依赖
#在可执行python代码的环境下执行即可
pip install pillow
pip show pillow

#奇怪,但是 pip install PIL 没有结果,应该是取代了PIL

一、基础

使用Image类:

# from Pillow import Image 显示 no module
from PIL import Image
im = Image.open("1.png")

print(im.format,im.size,im.mode) # --> PNG (1080, 2340) RGBA

im.show()  # 会打开外部程序展示图片

.

im.mode 说明
1 1-bit 像素, 黑和白, 一个像素占用一个byte
L 8-bit 像素, 黑和白
P 8-bit 像素, 使用调色板映射到任何其他模式
RGB 3x8-bit 像素, 真彩色
RGBA 4x8-bit 像素, 带透明度掩码的真彩色
CMYK 4x8-bit 像素, 分色
YCbCr 3x8-bit 像素, 颜色视频格式

.

# 提取子矩阵
box = (100, 100, 400, 400)
region = im.crop(box)

# PixelAccess Class
px = im.load()
print(px[4,4]) #返回(4,4)位置的RGBA值

二、字符画

from PIL import Image # PIL 是一个 Python 图像处理库

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# 是我们的字符画所使用的字符集,一共有 70 个字符,字符的种类与数量可以自己根据字符画的效果反复调试的

WIDTH = 60 # 字符画的宽
HEIGHT = 45 # 字符画的高


# 将256灰度映射到70个字符上,也就是RGB值转字符的函数:
def get_char(r, g, b, alpha=256):  # alpha透明度
    if alpha == 0:
        return ' '
    length = len(ascii_char)
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)  # 计算灰度
    unit = (256.0 + 1) / length
    return ascii_char[int(gray / unit)]  # 不同的灰度对应着不同的字符
    # 通过灰度来区分色块


if __name__ == '__main__':
    img = 'C:\\Users\\16413\\Pictures\\Saved Pictures\\3.jpg' # 图片所在位置
    im = Image.open(img)
    im = im.resize((WIDTH, HEIGHT), Image.NEAREST)
    txt = ""
    for i in range(HEIGHT):
        for j in range(WIDTH):
            txt += get_char(*im.getpixel((j, i))) # 获得相应的字符
        txt += '\n'
    print(txt)  # 打印出字符画
    # 将字符画 写入文件中
    with open("C:\\Users\\16413\\Pictures\\Saved Pictures\\output.txt", 'w') as f:
        f.write(txt)

参考资料:


文章作者: ╯晓~
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ╯晓~ !
评论
  目录