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中的列表推导浅析
Apr 26 Python
Python类方法__init__和__del__构造、析构过程分析
Mar 06 Python
Python编程实战之Oracle数据库操作示例
Jun 21 Python
Python 闭包的使用方法
Sep 07 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Django利用AJAX技术实现博文实时搜索
May 06 Python
Python 线程池模块之多线程操作代码
May 20 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
Jquery 切换不同图片示例代码
2013/12/05 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
Django自定义用户认证示例详解
2018/03/14 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
django实现类似触发器的功能
2019/11/15 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
银行实习生的自我评价
2013/12/09 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
出国签证在职证明
2014/09/20 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
党员转正申请报告
2015/05/15 职场文书
中秋节主题班会
2015/08/14 职场文书
2016教师国培研修感言
2015/12/08 职场文书
信息技术课教学反思
2016/02/23 职场文书
调解协议书范本
2016/03/21 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android