用python将图片转换为字符图片,很多前辈都做过的东西,踩着前辈们的脚步,尝试用Python做些事,加强对python理解
将图片转换位字符串,需要引入pillow的Image模块
使用open()函数读取图片文件
>>>im = Image.open(r"C:\Users\Administrator\1pthw\r11.png")
>>>print(im)
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=153x153 at 0x2E866D8>
mode = RGBA:mode表示图像的像素和深度,常用的有真彩"RGB"和灰度"L"
size = 153x153:size是一个二元tuple,表示图像的width和height
Image.show():显示图像
Image.resize((WIDTH,HEIGHT),Image.NEAREST):新图片像素大小
Image.rotate(45):顺时针旋转
cmyk = im.convert("CMYK")
gray = im.convert("L"):颜色转换
image.thumbnail(size,Image.ANTIALIAS):压缩图片
Image.getpixel():返回给定位置的像素值
一下是一个多数人做过的将图片转换为字符图的例子
from PIL import Image
# argparse库用来管理命令行参数输入
import argparse
# 创建一个命令解析器
parser = argparse.ArgumentParser()
# 输入文件
parser.add_argument('file')
# 输出文件
parser.add_argument('-o', '--output')
# 输出图片宽度
parser.add_argument('--width', type = int, default =80)
# 输出图片高度
parser.add_argument('--height', type = int, default = 80)
# 获取参数
args = parser.parse_args()
#提取文件
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
#字符集合
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
#图像处理,a,g,b为三原色,alpha为透明度
def get_char(r, g, b, alpha = 256):
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(gary/unit)]
if __name__ == '__main__':
#打开原图片
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)
#输出文件
if OUTPUT:
with open(OUTPUT, 'w') as f:
f.write(txt)
else:
with open("output.txt", 'w') as f:
f.write(txt)
Argparse的作用就是为py文件封装好可以选择的参数
parser = argparse.ArgumentParser():创建一个命令行解析器
parser.add_argument():给Argparse上添加命令参数,指定可选的命令行选项