python如何在终端里面显示一张图片


Posted in Python onAugust 17, 2016

Linux终端里面可谓是奇妙无限,很多优秀的软件都诞生在终端里面。相较之下,Windows本身的理念和Linux就不一致,所以,你懂得。
下面,我们不妨先思考一下,如何在终端里面显示一张图片?

在终端里面显示,肯定就不像在看图软件里那样的细腻了,我们只是以字符代替某一点的像素,把大致的轮廓显示出来罢了。

编码

既然思路很清晰了,下面就来编码了。

# coding:utf-8
import sys

reload(sys)
sys.setdefaultencoding('utf8')
#  __author__ = '郭 璞'
#  __date__ = '2016/8/4'
#  __Desc__ = 一个可以将图片转换成终端字符形式的小工具

from time import *
import Image
class ImageTool():

  def __init__(self):
    print 'Initialization Completed! @',ctime()

  def getChars(self,image_pixels,image_width,image_height):
    replace_chars = 'ABCDEFGHIJKLMNO '
    terminal_chars = ''
    for h in xrange(image_height):
      for w in xrange(image_width):
        point_pixel = image_pixels[w,h]
        terminal_chars +=replace_chars[int(sum(point_pixel)/3.0/256.0*16)]
      terminal_chars+='\n'
    return terminal_chars

  def formatImage(self,imagename,image_width,image_height):
    img = Image.open(imagename,'rb')
    if img.mode != 'RGB':
      img = img.convert('RGB')
    w,h = img.size
    rw = image_width*1.0/w
    rh = image_height*1.0/h
    r = rw if rw<rh else rh
    rw = int(r*w)
    rh = int(r*h)
    img = img.resize((rw,rh),Image.ANTIALIAS)
    return img

  def entrance(self,image_path,out_width,out_height):
    image = self.formatImage(imagename=image_path,image_width=out_width,image_height=out_height)
    image_pixels = image.load()
    out_width ,out_height = image.size
    terminal_chars = self.getChars(image_pixels=image_pixels,image_width=out_width,image_height=out_height)

if __name__ == "__main__":
  tool = ImageTool()
  imagename = sys.argv[1]
  w = int(sys.argv[2])
  h = int(sys.argv[3])
  tool.entrance(imagename,w,h)

运行

运行程序很简单,我们按照命令行参数来执行即可。

python Image2Chars.py target_image_name output_width output_height

注意,图片名称是包含完整的路径的图片名称

结果
 •素材图片

python如何在终端里面显示一张图片

•终端显示效果

python如何在终端里面显示一张图片

文字类型的看起来还凑活,细腻类型的图片就不太好了。这就是因为我们转换像素的时候的粒度有点大了的缘故。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
python3使用tkinter实现ui界面简单实例
Jan 10 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
简单了解django缓存方式及配置
Jul 19 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 Python
Python restful框架接口开发实现
Apr 13 Python
如何使用python切换hosts文件
Apr 29 Python
Python变量格式化输出实现原理解析
Aug 06 Python
Django解决frame拒绝问题的方法
Dec 18 Python
python性能测试工具locust的使用
Dec 28 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 #Python
Python入门教程之运算符与控制流
Aug 17 #Python
python 循环while和for in简单实例
Aug 16 #Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 #Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 #Python
详解python的几种标准输出重定向方式
Aug 15 #Python
如何将python中的List转化成dictionary
Aug 15 #Python
You might like
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
python根据出生日期获得年龄的方法
2015/03/31 Python
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
python的Tqdm模块的使用
2018/01/10 Python
使用Python发现隐藏的wifi
2020/03/04 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
自我鉴定模板
2013/10/29 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
医学检验专业自荐信
2014/09/18 职场文书
英文感谢信格式
2015/01/21 职场文书
数学教师求职信范文
2015/03/20 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书