python将图片表情包转化成字符
原理:
- 將簡單的表情圖取灰度圖像二值化,然后不同值用不同的字符串代替該像素即可
- 擴展一下,可自行定義一個數值(最好為2的指數冪,2,4,8,16等),將256個灰度值等分成幾個范圍,以4為例,先自行定義四個字符,0-63為第一塊,64-127為第二塊,然后掃描灰度圖,按灰度值確定屬于四個范圍的哪一塊,然后用相應的字符替換該像素即可
- 顯而易見的是:當我們取值越大,給出的字符越多時,越能體現圖像的細節,但是鑒于字符的文本顯示非常依賴于編輯器,所以效果可能不是很好。
一些總結
舉例字符數組的排列比較有講究,換一個順序,圖片的展示效果完全不一樣,這個大家可以自行測試。
以我個人的使用經驗來看,字符之間的漸變應該比較小,但是兩端的區別較大,這樣的設置顯示效果理論上應該比較好,舉例:mn這兩個字符相鄰比較合適,空格和$@#之類的字符應該隔得比較遠,簡單來說整個樣例字符的分布理想狀態應該類似于一條由明到暗的漸變帶一樣
from PIL import Image
chars = list("A-% ,+1n&M-B/\?<8&WM#$_+~*|(){}[]>i!lI;:,\"^`'. ")
# 圖像整體使用多少個字符來表示? 必須為2的指數倍2,4,6,8,16,32最大
# 對于只想看輪廓的圖,2或4顯示效果較好,對稍微追求細節的圖稍微弄大一點
num = 4;
chars = chars[:num]
# isThumb = True
isThumb = False
width,height =80,40
#分節因子
factor = int(256 / len(chars))
# 依據灰度值階梯返回不同的字符
def get_char(pix):
? ? for i in range(0,len(chars)):
? ? ? ? if pix < factor * (i+1):
? ? ? ? ? ? return chars[i]
img = Image.open('flower.jpg')
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 = 0,0
# 進行圖片大小的變換
if isThumb:
? ? w,h = width,height
? ? img=img.resize((w,h),Image.NEAREST)? ?#NEAREST低質量圖
else:
? ? w,h = img.size
? ? img = img.resize((w,int(h/2)),Image.NEAREST)
? ? h= int(h/2)
data=[]
pix = img.load()
length = len(chars)
data = ""
#掃描整個圖片,按灰度置換圖片
for i in range(0,h):
? ? line = ""
? ? for j in range(0,w):
? ? ? ? line += get_char(pix[j,i])
? ? data += line+"\n"
with open("a.txt",'w') as f:
? ? f.write(data)
?
?
?
知識點記錄:
一、圖片的打開與顯示
from PIL import Image
img=Image.open('d:/dog.png')
img.show()
另一種方式
from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('d:dog.png')
plt.figure("dog")#圖片的名稱
plt.imshow(img)
plt.show()
打開圖片后,可以使用一些屬性來查看圖片信息
print(img.size)#圖片的尺寸
print(img.mode)#圖片的模式
print(img.format)#圖片的格式
二、圖片的保存
img.save('d:/dog.jpg')
就只需要一行代碼,不僅能保存圖片,還可以轉換格式
三、讀取圖像并將其轉換成灰度圖像
img=Image.open('d:/dog.jpg').convert('L')
坐標軸不顯示的操作:
from ?pylab import *
axis('off')
四、顯示輪廓圖像和直方圖
from PIL import Image
from pylab import *
?
# 讀取圖像到數組中
im = array(Image.open('time.jpg').convert('L'))
?
# 新建一個圖像
figure()
# 不使用顏色信息
gray()
# 在原點的左上角顯示輪廓圖像
contour(im, origin='image')
axis('equal')
axis('off')
figure()
hist(im.flatten(),128)
show()
?
?
?
?
總結
以上是生活随笔為你收集整理的python将图片表情包转化成字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JS组件系列】——表格组件神器:boo
- 下一篇: 期末题库是Excel版的,如何转化成Wo