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通过线程实现定时器timer的方法
Mar 16 Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
python对视频画框标记后保存的方法
Dec 07 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
Django基础知识 web框架的本质详解
Jul 18 Python
python nmap实现端口扫描器教程
May 28 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
基于Python生成个性二维码过程详解
Mar 05 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
python用分数表示矩阵的方法实例
Jan 11 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&amp;MYSQL留言板源码
2020/07/19 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
python 画条形图(柱状图)实例
2020/04/24 Python
python中温度单位转换的实例方法
2020/12/27 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
学生请假条格式
2014/04/11 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
安阳殷墟导游词
2015/02/10 职场文书
专职安全员岗位职责
2015/04/11 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
python的变量和简单数字类型详解
2021/09/15 Python
pt-archiver 主键自增
2022/04/26 MySQL
Springboot中如何自动转JSON输出
2022/06/16 Java/Android