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 30 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
python简单实现刷新智联简历
Mar 30 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
python处理两种分隔符的数据集方法
Dec 12 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
基于python实现可视化生成二维码工具
Jul 08 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桌面中心(一) 创建数据库
2007/03/11 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
2014年上半年工作自我评价
2014/01/18 职场文书
学期自我评价
2014/01/27 职场文书
中学教师自我鉴定
2014/02/07 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
社会实践的活动方案
2014/08/22 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
环卫工人慰问信
2015/02/15 职场文书
复兴之路观后感
2015/06/02 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
详解Python中__new__方法的作用
2022/03/31 Python
Vue深入理解插槽slot的使用
2022/08/05 Vue.js