ホームページ  >  記事  >  バックエンド開発  >  Pythonはターミナルに画像を表示します

Pythonはターミナルに画像を表示します

高洛峰
高洛峰オリジナル
2017-02-25 11:35:443092ブラウズ

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_nameoutput_widthoutput_height

画像名は完全なパスを含む画像名であることに注意してください

結果
•素材画像

Pythonはターミナルに画像を表示します

•端末表示効果

Pythonはターミナルに画像を表示します

タイプ可もなく不可もなくといった感じですが、繊細なタイプの絵はあまり良くありません。これは、ピクセルを変換するときの粒度が少し大きすぎるためです。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

ターミナルに画像を表示する Python に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。