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展示动态规则法用以解决重叠子问题的示例
Apr 02 Python
python类的继承实例详解
Mar 30 Python
Python实现类的创建与使用方法示例
Jul 25 Python
Python使用pickle模块存储数据报错解决示例代码
Jan 26 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
python中abs&amp;map&amp;reduce简介
Feb 20 Python
python3处理含有中文的url方法
May 10 Python
简单介绍python封装的基本知识
Aug 10 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
Python实现捕获异常发生的文件和具体行数
Apr 25 Python
Python selenium爬虫实现定时任务过程解析
Jun 08 Python
Python改变对象的字符串显示的方法
Aug 01 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调用Java对象的方法
2006/10/09 PHP
php 抽象类的简单应用
2011/09/06 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
newxtree.js代码
2007/03/13 Javascript
javascript动态加载三
2012/08/22 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
Vue.js的动态组件模板的实现
2018/11/26 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
超简单使用Python换脸实例
2019/03/27 Python
Python下简易的单例模式详解
2019/04/08 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
银行会计职员个人的自我评价
2013/09/29 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
个人委托书
2014/07/31 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
股权转让协议范本
2014/12/07 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
感谢师恩主题班会
2015/08/17 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
ant design vue的form表单取值方法
2022/06/01 Vue.js