Python实现图片转字符画的代码实例


Posted in Python onFebruary 22, 2019

原理

1. 计算出图片颜色对应的灰度值,计算公式如下

    gray = 0.2126 * r + 0.7152 * g + 0.0722 * b

2. 根据灰度值,从字符集中获取图片中每个像素点对应的字符

代码

# !/usr/bin/env python
# -*- coding:utf-8 -*-
from PIL import Image
import argparse
#命令行输入参数处理
parser = argparse.ArgumentParser()
parser.add_argument('file')   #输入文件
parser.add_argument('-o', '--output')  #输出文件
parser.add_argument('--width', type = int, default = 50) #输出字符画宽
parser.add_argument('--height', type = int, default = 50) #输出字符画高
#获取参数
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;:,\"^`'. ")
def get_char(r,g,b,alpha = 256):
  """将256灰度映射到70个字符上"""
  if alpha == 0:
    return ' '
  length = len(ascii_char)
  # 计算灰度的公式
  gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
  unit = (256.0 + 1)/length
  index=int(gray/unit)
  return ascii_char[index]
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)z

运行结果

Python实现图片转字符画的代码实例

Python实现图片转字符画的代码实例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
Python实现的弹球小游戏示例
Aug 01 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
Python如何在DataFrame增加数值
Feb 14 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
Feb 24 Python
python获取本周、上周、本月、上月及本季的时间代码实例
Sep 08 Python
使用Python绘制台风轨迹图的示例代码
Sep 21 Python
如何完美的建立一个python项目
Oct 09 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
Python中正则表达式的用法总结
Feb 22 #Python
python ddt数据驱动最简实例代码
Feb 22 #Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 #Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 #Python
pandas修改DataFrame列名的实现方法
Feb 22 #Python
pyhanlp安装介绍和简单应用
Feb 22 #Python
Python3.7 dataclass使用指南小结
Feb 22 #Python
You might like
用PHP生成自己的LOG文件
2006/10/09 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
2019/08/07 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
Python坐标线性插值应用实现
2019/11/13 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
行政管理专业推荐信
2013/11/02 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
期末自我鉴定
2014/02/02 职场文书
给校长的建议书500字
2014/05/15 职场文书
大学生简历求职信
2014/06/24 职场文书
离婚答辩状范文
2015/05/22 职场文书