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 출력_폭 출력_높이
이미지 이름은 전체 경로
결과 •소재 사진