python 字符画

优化了该文章的源码

原图

在这里插入图片描述

字符画

在这里插入图片描述

源码

'''
转换一张彩色的图片,很多种颜色,要怎么对应到黑白色的字符画上去?
答案:先转换成灰度图
灰度值:指黑白图像中点的颜色深度,范围一般从 0 到 255,白色为255,黑色为 0,故黑白图片也称灰度图像
我们可以使用灰度值公式将像素的 RGB 值映射到灰度值:
gray = 0.2126 * r + 0.7152 * g + 0.0722 * b
任何一个 RGB 像素点都可以映射成一个 0~255 之间的整数。
我们可以定义一个字符列表,然后根据像素点转换成的灰度值在 0~255 之间的相对位置,将像素点替换成我们定义的字符列表中相对位置上的字符。
'''
from PIL import Image

# 填充像素的字符
charWord = '''甫新钱 '''
# 一共有多少个字符
charCount = len(charWord)


# 把图片的像素转为字符
def pixelToChar(image):
    # 转为灰度图
    image = image.convert("L")
    # 替代像素的字符
    char = ''
    # 遍历获取像素 然后转换为对应的字符
    for height in range(0, image.size[1]):
        for width in range(0, image.size[0]):
            # 获取灰度值
            gray = image.getpixel((width, height))
            # 根据灰度值转换为对应的字符
            char = char + charWord[int(((charCount) * gray) / 256)]
        # 一行结束  换行
        char = char + '\r\n'
    # 返回对应的字符
    return char


if __name__ == '__main__':
    # 图片路径
    picturePath = u'/Users/apple/Downloads/desktopPicture/qianFuXin3811t012d7ac7af5d39ff86.jpg'
    # 用二进制打开图片
    pictureOpen = open(picturePath, 'rb')
    # 打开图片
    image = Image.open(pictureOpen)
    # 修剪图片  默认把图片缩小0.618倍
    image = image.resize((int(image.size[0] * 0.618), int(image.size[1] * 0.618)))

    # 新建一个文本  写入字符画
    txtPath = '/Users/apple/Downloads/desktopPicture/qian.txt'
    txtWriter = open(txtPath, 'w')
    # 开始把像素转换为字符画  并写入文件
    txtWriter.write(pixelToChar(image))
    # 关闭
    txtWriter.close

猜你喜欢

转载自blog.csdn.net/Mr_Qian_Ives/article/details/107366432