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 + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Python中使用MELIAE分析程序内存占用实例
Feb 18 Python
python集合用法实例分析
May 30 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
结合OpenCV与TensorFlow进行人脸识别的实现
Oct 10 Python
Python 依赖库太多了该如何管理
Nov 08 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
python实现自定义日志的具体方法
May 28 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
数据库相关问题
2006/10/09 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
12步教你理解Python装饰器
2016/02/25 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
Python通过文本和图片生成词云图
2020/05/21 Python
python 星号(*)的多种用途
2020/09/21 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
超级搞笑检讨书
2014/01/15 职场文书
学习决心书
2014/03/11 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python