@sevenup233
2019-03-03T13:09:19.000000Z
字数 1074
阅读 595
PY
图像处理库:PIL(Python Imaging Library)
官方教程:http://www.effbot.org/imagingbook/
对整体:打开,保存,调色,变形(简单功能的PS)
对单点:获取每个像素信息,逐一修改
流程:
【黑白可输出txt】打开图像--》获取图片每个像素的灰度--》根据灰度输出字符到txt文件
【彩色只能输出图片】打开图像--》获取图片每个像素的灰度&颜色--》根据灰度输出字符到txt文件--》根据颜色吧字符绘制成图片文件
【彩色也可能输出txt】但是py的word插件没有找到设定输出文本颜色的功能
#定义输出的字符
ascii_char = list("@&*.o ")
#读取图片的信息(名称、宽高)
IM=Image.open(xxx)
WIDTG=im.size[0]
HEIGHT=im.size[1]
#灰度与字符对应
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(gray/unit)]
#暂存文本
txt = ""
#暂存颜色
colors = []
#遍历每个像素,记录像素颜色信息和对应灰度的字符
for i in range(HEIGHT):
for j in range(WIDTH):
pixel = im.getpixel((j,i))
txt += get_char(*pixel
#记录像素颜色信息
colors.append((pixel[0],pixel[1],pixel[2]))
txt += '\n'
colors.append((0,0,0))
#只要字符可以用文本模块输出txt到txt
#需要上色用ImageDraw为每个字符进行上色
#字符大小
font_h=12
font_w=12
#上色,输出图片
dr = ImageDraw.Draw(newim)
newim = Image.new("RGB",(940,400),(0,0,0))
for i in range(len(txt)):
if(txt[i]=='\n'):
x+=font_h
y=-font_w
dr.text([y,x],txt[i],colors[i])
y+=font_w
newim.save("output.png", encoding='utf-8')