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 06 Python
python实现探测socket和web服务示例
Mar 28 Python
Python常用的爬虫技巧总结
Mar 28 Python
python实现汉诺塔算法
Mar 01 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
Python 通过打码平台实现验证码的实现
May 13 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
python中bytes和str类型的区别
Oct 21 Python
python实现图片上添加图片
Nov 26 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
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
Python matplotlib实时画图案例
2020/04/23 Python
Python实现SMTP邮件发送
2020/06/16 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
python 制作简单的音乐播放器
2020/11/25 Python
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
大学班级文化建设方案
2014/05/06 职场文书
运动会标语
2014/06/21 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
《观潮》教学反思
2016/02/17 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
Nginx缓存设置案例详解
2021/09/15 Servers