网络编程
位置:首页>> 网络编程>> Python编程>> python如何在终端里面显示一张图片

python如何在终端里面显示一张图片

作者:Marksinoberg  发布时间:2023-08-23 01:34:00 

标签:python,终端,图片

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如何在终端里面显示一张图片

文字类型的看起来还凑活,细腻类型的图片就不太好了。这就是因为我们转换像素的时候的粒度有点大了的缘故。

来源:http://blog.csdn.net/marksinoberg/article/details/52116088

0
投稿

猜你喜欢

  • 数据类型是所有开发语言的基础,JavaScript虽然是一个弱类型的脚本语言,但是在数据类型上也有很多讲究的,看了淘宝UED玉伯的一篇文章,
  • 在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方式进行阐述。在这
  • 随着十几年前“用户体验”这一概念的提出,“用户研究”也逐渐发展成为一个新兴的行业。那么,“用户研究”究竟包括哪些工作内容,在企业中如何开展,
  • 大部分服务器管理员知道MySQL数据库管理系统(RDBMS)是高度灵活的软件块,带有范围广阔的启动选项,可以用来修改相关行为。然而,大部分人
  • javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它是一个十分容易让人模糊的东西,在一般情况下
  • 目录:分析和设计组件编码实现和算法用 Ant 构建组件测试 JavaScript 组件话说上期我们讨论了队列管理组件的设计,并且给它取了个响
  •  Float(浮动)概念也许是CSS中最让人迷惑的一个概念吧。Float经常被错误理解,而且因为将上下文元素全部浮动导致的可读性、
  • 下面我们以论坛排行榜举例说明:<% @ LANGUAGE="VBSCRIPT" %&
  • IE 开发团队更改了 IE8 的 User-agent ,更改的部分信息如下:IE8 on Windows Vista (Compatibi
  • 划动门菜单技术:运行代码框<style>body {font-size:12px;font-family:宋体}ul.TabBa
  • 在开发WEB应用程序中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件
  • JavaScript中没有Trim函数,VBScript语言中才有这个函数,就是去掉字符串头和尾的空格。您可以访问这篇文章:《增加 java
  • 由于asp中是使用双引号作为字符串的开始和结束标志的,单一个字符串中的双引号出现次数大于两个时,程序就有可能运行错误。asp中是怎么输出引号
  • 这篇论坛文章(赛迪网技术社区)着重介绍了有关SQL注入防御的防御策略及实施步骤,详细内容请参考下文:从去年下半年开始,很多网站被损害,他们在
  • 最近在研究tensorflow自带的例程speech_command,顺便学习tensorflow的一些基本用法。其中tensorboard
  • 1:下载FCKEditor编辑器下载下来后解压到你网站的目录,最好就放在根目录下,文件夹名字就用FCKEditor;这里可以随便自己喜好,但
  • 下拉框连动JavaScript代码,市区二级联动多级联动下拉选择框,动态获取下一级琥珀无限级联动菜单-JavaScript版 <htm
  • 首先我的环境已配置好:GO的目录结构是:add.gopackage calc//函数名必须大写首字母,不然外部包找不到func Add(a
  • 代码如下:<% '功能:取得文件扩展名 Function getFileExt(sFileNam
  • 首先,这片文章纯粹是我的个人经验之谈,适用于我常见的环境及项目中。个人建议,数据库字符集尽量使用utf8(HTML页面对应的是utf-8),
手机版 网络编程 asp之家 www.aspxhome.com