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使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
python实现SMTP邮件发送功能
Jun 16 Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 Python
python的中异常处理机制
Aug 30 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
基于python进行抽样分布描述及实践详解
Sep 02 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
python自动化实现登录获取图片验证码功能
Nov 20 Python
实现Python3数组旋转的3种算法实例
Sep 16 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
PHP中for与foreach的区别分析
2011/03/09 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
React组件生命周期详解
2017/07/03 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
Python实现控制台输入密码的方法
2015/05/29 Python
python3操作mysql数据库的方法
2017/06/23 Python
python调用百度REST API实现语音识别
2018/08/30 Python
django+mysql的使用示例
2018/11/23 Python
Python基础教程之异常详解
2019/01/10 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
50岁生日感言
2014/01/23 职场文书
财务出纳岗位职责
2014/02/03 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
mysql事务隔离级别详情
2021/10/24 MySQL