python實現圖片轉字符畫


python實現圖片轉字符畫

字符畫,就是一系列字符的組合,組成的形狀是一幅可識別的圖畫


原理:
每一張彩色的圖片,之所以能夠呈現出colorful或者dim的畫面,是因為每一張圖都由很多個像素點組成,而每一個像素點都有不同的顏色,而這個顏色就由三個值(rgb)對應三原色的百分比構成,所以每一個像素點都有三個值(rgb,范圍0-255),我們可以將每一個像素點轉換成一個字符來形成字符圖畫
灰度值:指黑白圖像中點的顏色深度,范圍一般從0到255,白色為255,黑色為0,故黑白圖片也稱灰度圖像
rgb轉換成灰度值公式:gray=int(r0.299+g0.587+b0.114)
通過這個公式可以將256
256*256的范圍減少到0-255,同樣,也沒有256個單色字符去一一對應范圍啊,這個時候可以靈活變通,將兩到三個灰度值對應為一種字符
再具體的原理就不再進行過多解釋
要實現圖片轉字符畫功能,需要一個第三方圖像處理庫PIL(Python Image Library)

實現字符畫所需要的字符集(共70個)

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
from PIL import Image  #PIL是python的圖像處理庫
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.")
WIDTH = 60
HEIGHT = 45
#設置字符畫的寬高

#將256個灰度映射到70個字符上,也就是RGB轉字符
def get_char(r,g,b,alpha = 256):
	if alpha == 0:
		return ''
	length = len(ascii_char)
	gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) #計算灰度
	unit = (256.0 + 1)/length
	return ascii_char[int(gray/unit)] #不同灰度對應不同的字符

if __name__ == '__main__':	
	img = 'D:/python/cat.png'            #圖片所在位置(反斜杠)
	im = Image.open(img)
	im = im.resize((WIDTH, HEIGHT), Image.NEAREST)
	txt = ""
	for i in range(HEIGHT):
		for j in range(WIDTH):
			txt += get_char(*im.getpixel((j,i)))       #獲得相應的字符
		txt += '\n'
	print(txt)   #打印出字符畫
	with open("C:/Users/Vincent/Desktop/3.txt",'w') as f:
		f.write(txt)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM