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字典几种方法总结(推荐)
Sep 11 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
python的中异常处理机制
Aug 30 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
Python 3.8 新功能全解
Jul 25 Python
python实现PID算法及测试的例子
Aug 08 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
win10+anaconda安装yolov5的方法及问题解决方案
Apr 29 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 DOS攻击实现代码(附如何防范)
2012/05/29 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
很可爱的输入框
2008/08/03 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
布同 统计英文单词的个数的python代码
2011/03/13 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
python数组过滤实现方法
2015/07/27 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python模拟表单提交登录图书馆
2018/04/27 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
门卫班长岗位职责
2013/12/15 职场文书
八一演出活动方案
2014/02/03 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
金榜题名主持词
2015/07/02 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python
php去除deprecated的实例方法
2021/11/17 PHP