Python入门项目——图片转字符画

1、pillow库 和 argparse 模块
Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等
argarse: argparse是python用于解析命令行参数和选项的标准模块
用法:
1:import argparse # 导入该模块
2:parser = argparse.ArgumentParser() # 创建模块的解析对象
3:parser.add_argument() # 添加要关注的命令行对象
4:parser.parse_args() # 获取命令行参数

2、实现思路
A.首先在已经Python环境下安装pillow库
首先找到你的Python安装目录下的 Scripts\easy_install.exe 可执行程序,点击进入后输入安装命令:
easy_install.exe pip 显示安装成功后打开cmd界面
输入命令 pip 在通过pip命令: pip install pillow 安装pillow库
B、实现原理
I.实现图片转字符画,找到替代画的字符
II.实现字符和单色的对应,即:灰度值和RGB颜色的映射,灰度值公式
III.将转换成功的字符输出到一个txt文本文件中
C、实现代码
from PIL import Image  # 导入PIL库下的Iamge模块
import argparse        # 导入argparse模块,用于接收命令行参数

#创建一个 argparse模块的解析对象
parse = argparse.ArgumentParser()

# 匹配命令行参数
# 首先设置要匹配的是一个文件
parse.add_argument("file")

# 一个 “-”是匹配首字母为,两个“--”匹配全文
parse.add_argument("-o","--output")

# 设置匹配到的高度,设置高度的类型和值
parse.add_argument("--width",type=int,default=80)

# 设置匹配到的宽度,设置宽度的类型和值
parse.add_argument("--height",type=int,default=42)

# 获取命令行的参数
args = parse.parse_args()

# 将参数值拆分
# 图像文件
IMG = args.file

# 图像宽度
WIDTH = args.width

# 图像高度
HEIGHT = args.height

# 输出文件名字
OUTPUT = args.output

# 设置转换字符,70个字符
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")

# 设置图片上的像素点的转换字符
# RGB:三原色,alpha:色彩空间,0-255
def get_char(r, g, b, alpha=256):

    # 空值判断
    if alpha == 0:
        return ' '

    # 计算转换字符列表的长度
    length = len(ascii_char)

    # 灰度值公式
    #灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像
    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__":

    # 打开并识别给定的图像
    pic = Image.open(IMG)

    # 重新采样,并设置大小
    # 前面参数为高和宽的一个元组,默认为NEAREST,还有其他三个参数
    pic = pic.resize((WIDTH,HEIGHT),Image.NEAREST)

    # 设置一个空的字符串,用于保存像素转换的字符
    txt = ""

    # 遍历获取的图像,读取图像的像素值并返回
    # 将获取的像素值转换成字符,并用字符集中的字符替代
    # 这里用的高和宽是上面重新设置的高和宽
    for i in range(HEIGHT):
        for j in range(WIDTH):
            txt += get_char(*pic.getpixel((j,i)))
        txt += "\n"

    # 打印转换后的字符串
    print(txt)

    # 将转换后的字符写入文件
    if OUTPUT:
        f = open("OUTPUT","w")
        f.write(txt)
    else:
        f = open("output.txt","w")
        f.write(txt)
3、实现效果


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值