python用字符画生成动物_python生成字符画

python生成字符画

这个idea来自于实验楼,非常适合练习PIL的像素处理,更重要的是非常有意思。

环境配置

依赖的第三方库就是PIL(Python Image Library),可以直接使用pip安装

pip install pillow

测试安装是否成功

>>> from PIL import Image

原理

原理其实很简单,主要分为三步:

导入图片,做预处理

把图片二值化,转化成灰度图,在把灰度映射到字符上,用一个字符表示一个像素,返回一个文本

把文本写入文件

以下是main函数

def main():

img = loadImage('./a.jpg')

text = convert(img)

store(text)

print "finish!"

导入图片

#打开图片,还可以做预处理如resize

def loadImage(fileName):

img = Image.open(fileName)

return img

把图片转成文本

#核心函数,把image对象转换成文本

def convert(img):

color = "MNHQ$OC?7>!:-;." #自定义字符集

length = len(color)

w,h = img.size

grey = img.convert('L') #转化为灰度图

text = ''

#依次遍历每个像素,把灰度图转化成文本

for x in xrange(h):

for y in xrange(w):

pixel = grey.getpixel((y,x))

if pixel==0:

text += ' '

else:

text += color[(pixel*length)/255-1] #减1是为了防止字符串越界

text += '\n'

return text

写入文件,这里采用HTML形式

#写文件,这里把结果用HTML呈现

def store(text):

head= '''

body {font-family:Monospace; font-size:5px;}

tail = ''

html = head + text.replace('\n','
') + tail

#写文件

f = open('out.html','w')

f.write(html)

f.close()

完整代码

#coding=utf-8

from PIL import Image

#打开图片,还可以做预处理如resize

def loadImage(fileName):

img = Image.open(fileName)

return img

#核心函数,把image对象转换成文本

def convert(img):

color = "MNHQ$OC?7>!:-;." #自定义字符集

length = len(color)

w,h = img.size

grey = img.convert('L') #转化为灰度图

text = ''

#依次遍历每个像素,把灰度图转化成文本

for x in xrange(h):

for y in xrange(w):

pixel = grey.getpixel((y,x))

if pixel==0:

text += ' '

else:

text += color[(pixel*length)/255-1] #减1是为了防止字符串越界

text += '\n'

return text

#写文件,这里把结果用HTML呈现

def store(text):

head= '''

body {font-family:Monospace; font-size:5px;}

tail = ''

html = head + text.replace('\n','
') + tail

#写文件

f = open('out.html','w')

f.write(html)

f.close()

def main():

img = loadImage('./a.jpg')

text = convert(img)

store(text)

print "finish!"

if __name__=="__main__":

main()

运行结果

a.jpg

out.html

效果非常理想,字符图还别有美感呢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值