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使用PyV8执行javascript代码示例分享
Dec 04 Python
Python实现配置文件备份的方法
Jul 30 Python
基于Python实现一个简单的银行转账操作
Mar 06 Python
python实现简单遗传算法
Mar 19 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
机器学习实战之knn算法pandas
Jun 22 Python
Python安装selenium包详细过程
Jul 23 Python
Python函数的默认参数设计示例详解
Dec 01 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
Django restful framework生成API文档过程详解
Nov 12 Python
快速解决pymongo操作mongodb的时区问题
Dec 05 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
第十一节 重载 [11]
2006/10/09 PHP
phpmyadmin操作流程
2006/10/09 PHP
PHP 文件类型判断代码
2009/03/13 PHP
PHP 批量删除 sql语句
2009/06/05 PHP
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
详解vue中axios的封装
2018/07/18 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
Python判断Abundant Number的方法
2015/06/15 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
python中threading开启关闭线程操作
2020/05/02 Python
Python列表如何更新值
2020/05/27 Python
在keras里实现自定义上采样层
2020/06/28 Python
竞聘书怎么写,如何写?
2014/03/31 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
Python装饰器的练习题
2021/11/23 Python
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL