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执行外部程序的常用方法小结
Mar 21 Python
浅谈django中的认证与登录
Oct 31 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
基于Django的python验证码(实例讲解)
Oct 23 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
Django中create和save方法的不同
Aug 13 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
python中def是做什么的
Jun 10 Python
python+openCV对视频进行截取的实现
Nov 27 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
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
JS重要知识点小结
2011/11/06 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
Django REST framework 分页的实现代码
2019/06/19 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
Order by的几种用法
2013/06/16 面试题
金融与证券专业求职信
2014/06/22 职场文书
同学会邀请函模板
2015/01/30 职场文书
婚宴致辞
2015/07/28 职场文书
理解python中装饰器的作用
2021/07/21 Python
Python如何使用循环结构和分支结构
2022/04/13 Python