不打碼的文本不是好圖片-趣玩Python系列1

身爲一個程序員,時時刻刻都受到Bug的危害,有時候只靠自己總不是能萬全無憂,這時候,有必要請護身符了!

先上效果。

轉換後的效果

信我者,無Bug

爲了實現圖片轉成字符文本,以下是具體思路:1.讀入圖片,將其轉化爲灰度圖片2.逐行掃描像素點,轉化爲對應的字符。實施細節:1.根據灰階,確定了8個字符,根據像素進行確認對應的字符,對應8個灰階。2.字符在顯示的時候長寬比不是一比一的,所以輸入圖片要首先經過調整,這裏就是簡單的高度除以2。3.用了PIL庫

代碼如下:

安裝必要插件


 
pip install pillow

run.py代碼

from img2ascii import *
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("inputpath",type =str ,help="Image file path") 
parser.add_argument("-r",'--resize',type =float ,help="The zoom percentage for output,please use decimal")
args = parser.parse_args()
print(args.inputpath)
if not args.resize:
    args.resize=1.0
else:
    print(args.resize)
img = Img2ascii(args.inputpath,args.resize)
output = open(args.inputpath+'.txt','w')
for line in img.data:
    print(line, file=output)
output.close()
print('Convert Done!')

img2ascii.py代碼


 
from PIL import Image
class Img2ascii:
    chars=[' ', ',', '+', '1', 'n','D','&','M']
    def getchar(self,pi):
        for i in range(0,8):
            if pi< (i+1)*32:
                return self.__class__.chars[7-i]
    def __init__(self,src,resize=1.0):
        img = Image.open(src)
        if img.mode=='P' or img.mode =='RGBA':
             im=Image.new('RGB',img.size,'white')
             im.paste(img.convert('RGBA'),img.convert('RGBA'))
             img= im
        img= img.convert('L')
        w,h =img.size
        h/=2
        w=int(w*resize)
        h=int(h*resize)
        img=img.resize((w,h),Image.ANTIALIAS)
        img.save('tmp.jpg')
        pixs = img.load()
        self.data=[]
        for i in range(0,h):
            line =''
            for j in range(0,w):
                line+=self.getchar(pixs[j,i])
            self.data.append(line)

執行:python3 run.py fo.jpeg -r 0.1

 

原圖

轉換後就是最終效果圖啦。

代碼庫地址:https://gitee.com/python_play/image_to_textimg

感謝知乎作者:李白

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章