序言
本文将详细介绍如何运用python完成图片转化字符画,使用PIL的python包实现数字图像处理,非常简单易懂,只需两行编码就可轻松将一张照片转化成字符画。

字符画介绍
字符画是由标识符搭配而成,它们可以被看作为清晰度较高的较大块,其中一个字节可表示一个颜色,标识符越多,表现的色调和层次感越好。要手工制作字符画需要良好的美术基础知识,还需要耗费大量时间和精力,但我们可以通过Python,只需简单的操作就可将图片轻松转化为1个字符画。
案例介绍
以下为两个案例源代码:
案例1
设计效果图:
先打开图,把图象修改尺寸:
img=Image.open(picPath)
img=img.resize((picW,picH))
随后载入灰度级,然后把灰度级和标识符相匹配下去就可以了。
fromPILimportImage
lstChars=list("$B%8&WM#*oahkbdpqwmZO0QLaCJUYXzczjhdhsdavunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'.")
defoneChars(r,g,b,alpha=256):
globallstChars
length=len(lstChars)
gray=int(0.2126*r+0.7152*g+0.722*b)
index=length*gray
returnlstChars[index]
picPath="C:UsersAdministratorDesktopaaaaaaa.png"
picH=40
picW=80
img=Image.open(picPath)
img=img.resize((picW,picH))
txt=""
foryinrange(picH):
forxinrange(picW):
txt+=oneChars(img.getpixel((x,y)))
txt+="\n"
printtxt
案例2
以下为源代码:
#-*-coding=utf-8-*-
fromPILimportImage
IMG='IMG.jpg' #设置图片文档
WIDTH=150 #设置字符画的宽
HEIGHT=80 #设置字符画的高
OUTPUT='T.txt' #设置存放字符画的文本文件
ascii_char=list("$B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'.") #设置显示的字符集
#将256灰度映射到70个字符上
defget_char(r,g,b,alpha=256):
#alpha为透明度
#判断alpha值,为0表示全透明
ifalpha==0:
return''
#获取字符集的长度,这儿为70
length=len(ascii_char)
#将RGB值转为灰度级gray,灰度级范围为0-255
gray=int(0.2126*r+0.7152*g+0.0722*b)
#灰度级范围为0-255,而字符集只有70
#需要进行如下处理才能将灰度级映射到指定的标识符上
#防止当灰度级为255时,输出的第70个字符超出列表索引,所以需要将(255+1)
unit=(255.0+1)/length
#返回灰度级对应的标识符
returnascii_char[int(gray/unit)]
if__name__=='__main__':
#打开并调整图片的宽和高
im=Image.open(IMG)
im=im.resize((WIDTH,HEIGHT),Image.NEAREST)
#初始化输出的字符串
txt=""
#遍历图片中的每一行
foriinrange(HEIGHT):
#遍历该行中的每一列
forjinrange(WIDTH):
#将(j,i)坐标的RGB清晰度转为标识符后添加到txt字符串
txt+=get_char(*im.getpixel((j,i)))
#遍历完一行后需要增加换行符
txt+="\n"
#输出到屏幕
print(txt)
withopen(OUTPUT,'w')asf:
f.write(txt)
使用以上代码即可将图片转化为字符画,运作完毕后会生成名为T.txt的文档。
原照:
生成文件图:
结尾
以上文章详细介绍了如何运用python完成图片转化字符画,希望可以给大家带来帮助。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5789.html
