Home  >  Article  >  Backend Development  >  Python displays a picture in the terminal

Python displays a picture in the terminal

高洛峰
高洛峰Original
2017-02-25 11:35:443089browse

The Linux terminal is full of wonders, and many excellent software are born in the terminal. In comparison, the concept of Windows itself is inconsistent with Linux, so you understand.

Next, we might as well think about it first, how to display a picture in the terminal?

When displayed in the terminal, it is definitely not as delicate as in the picture viewing software. We just replace the pixels at a certain point with characters and display the rough outline.

Coding

Now that the idea is very clear, let’s start with coding.


# 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)

Run

Running the program is very simple, we follow the command line parameters to execute.

python Image2Chars.py target_image_name output_width output_height

Note that the image name is the image name including the complete path

Result
•Material pictures

Python displays a picture in the terminal

•Terminal display effect

Python displays a picture in the terminal

The text type pictures look lively, and the delicate type pictures Not so good. This is because the granularity when we convert pixels is a bit too large.

The above is the entire content of this article. I hope it will be helpful to everyone's learning. I also hope that everyone will support the PHP Chinese website.

For more articles related to python displaying a picture in the terminal, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn