python生成字符画

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

环境配置

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

pip install pillow

测试安装是否成功

>>> from PIL import Image

原理

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

  1. 导入图片,做预处理
  2. 把图片二值化,转化成灰度图,在把灰度映射到字符上,用一个字符表示一个像素,返回一个文本
  3. 把文本写入文件

以下是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= '''
<html>
<head>
<style type="text/css">
body {font-family:Monospace; font-size:5px;}
</style>
</head>
<body> '''
tail = '</body></html>'
html = head + text.replace('\n','<br>') + 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= '''
<html>
<head>
<style type="text/css">
body {font-family:Monospace; font-size:5px;}
</style>
</head>
<body> '''
tail = '</body></html>'
html = head + text.replace('\n','<br>') + 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

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

python生成字符画的更多相关文章

  1. Python下字符画(ascii art)生成

    之前在b站上看到有人用C写了个脚本把妹抖龙op转换成字符画的形式输出了,感觉比较好玩在下就用python也写了一遍(主要是因为python比较简单好用).这里就这里就不介绍字符画了,因为能搜到这个的肯 ...

  2. 通过python将图片生成字符画

    基础知识: 1.python基础知识   快速学习链接:https://www.shiyanlou.com/courses/214 2.linux命令行操作   快速学习链接:https://www. ...

  3. python学习 —— 字符画

    代码: import os from PIL import Image WIDTH = int(250) HEIGHT = int(250/2) ascii_char = list('toahkbdp ...

  4. python 图片在线转字符画预览

    文章链接:https://mp.weixin.qq.com/s/yiFOmljhyalE8ssAgwo6Jw 关于python图片转字符画,相信大家都不陌生,经常出现在 n个超有趣的python项目中 ...

  5. python学习---50行代码实现图片转字符画2

    from PIL import Image codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<> ...

  6. python小项目(-)图片转字符画

    # -*- coding: utf-8 -*- from PIL import Image codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrj ...

  7. 用函数式的 Swift 实现图片转字符画的功能

    今天整理 Pocket 中待看的文章,看到这篇<Creating ASCII art in functional Swift>,讲解如何用 Swift 将图片转成 ASCII 字符.具体原 ...

  8. Spring boot自定义启动字符画(banner)

    spring boot项目启动时会打印spring boot的ANSI字符画,可以进行自定义. 如何自定义 实现方式非常简单,我们只需要在Spring Boot工程的/src/main/resourc ...

  9. 使用Python生成ASCII字符画

    使用Python生成ASCII字符画 在很多的网站主页中或者程序的注释中会有一些好看的字符注释画.显得很牛逼的样子 例如: 知乎 _____ _____ _____ _____ /\ \ /\ \ / ...

随机推荐

  1. Nginx中配置undertow进行两个项目的动静分离配置

    #user nobody; worker_processes ; pid /var/run/nginx.pid; events { worker_connections ; } http { incl ...

  2. SNMP MIBs and IPv6

    https://www.cisco.com/c/en/us/about/security-center/snmp-mib-ipv6.html

  3. springboot调用http方式

    1.httpclient 2.okhttp 3.feign 安装Gradle包 compile 'org.springframework.cloud:spring-cloud-starter-open ...

  4. 盘点那些Vs中常用到的Tab快捷编码

    1.快速声明for循环:for+Tab 2.快速声明Foreach遍历:foreach+Tab 3.快速定义属性:prop+Tab 4.

  5. POJ 2243 简单搜索 (DFS BFS A*)

    题目大意:国际象棋给你一个起点和一个终点,按骑士的走法,从起点到终点的最少移动多少次. 求最少明显用bfs,下面给出三种搜索算法程序: // BFS #include<cstdio> #i ...

  6. nginx做负载均衡 tomcat获得客户端真实ip

    因项目需要做tomcat2台机器的负载均衡,配置好负载环境后,发现tomcat的日志一律是我前置nginx代理服务器的ip 通过百度教材发现需要修改nginx的配置文件,修改代理头信息,传递给后方,后 ...

  7. day10.函数进阶

    函数的命名空间 从python解释器开始执行之后,就在内存中开辟了一个空间,每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来. 但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存, ...

  8. Loadbalancer

    LoadBalancer 可以将来自客户端的请求分发到不同的服务器,通过将一系列的请求转发到不同的服务器可以提高服务器的性能,并可以自动地寻找最优的服务器转发请求,这样不仅提高了系统性能,同时达到了负 ...

  9. sql 跨服务器查询

    创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin ...

  10. python线程池ThreadPoolExecutor与进程池ProcessPoolExecutor

    python中ThreadPoolExecutor(线程池)与ProcessPoolExecutor(进程池)都是concurrent.futures模块下的,主线程(或进程)中可以获取某一个线程(进 ...