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实现的彩票机选器实例
Jun 17 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 Python
python区块及区块链的开发详解
Jul 03 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
Python matplotlib实时画图案例
Apr 23 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
Python如何实现感知器的逻辑电路
Dec 25 Python
Python中的套接字编程是什么?
Jun 21 Python
Python中re模块的元字符使用小结
Apr 07 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
php连接数据库代码应用分析
2011/05/29 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
javascript document.referrer 用法
2009/04/30 Javascript
google地图的路线实现代码
2009/08/20 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
javascript中错误使用var造成undefined
2016/03/31 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
python中的插值 scipy-interp的实现代码
2018/07/23 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
高中毕业自我鉴定
2013/12/13 职场文书
实习心得体会
2014/01/02 职场文书
小学数学教学反思
2014/02/02 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
Java的Object类的九种方法
2022/04/13 Java/Android