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基础教程之面向对象的一些概念
Aug 29 Python
python+django加载静态网页模板解析
Dec 12 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
Python 忽略warning的输出方法
Oct 18 Python
Python爬虫之UserAgent的使用实例
Feb 21 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
django模板获取list中指定索引的值方式
May 14 Python
浅谈Python程序的错误:变量未定义
Jun 02 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
Document 对象的常用方法
2009/07/31 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
极简的Python入门指引
2015/04/01 Python
理解Python垃圾回收机制
2016/02/12 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python 自动重连wifi windows的方法
2018/12/18 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
Python内存映射文件读写方式
2020/04/24 Python
python代码实现猜拳小游戏
2020/11/30 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
十佳护士获奖感言
2014/02/18 职场文书
补充协议书范本
2014/04/23 职场文书
大学生村官个人总结
2015/02/15 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
遗愿清单观后感
2015/06/09 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL
Java实现简单小画板
2022/06/10 Java/Android