說明:如果有自己動手做過字符動畫,會知道字符動畫的“靈動性”核心在于使用的字符集。
簡單來說,動畫轉為字符動畫,原理是將動畫轉為灰階圖,灰度范圍是0~255,然后將對應灰度的像素點轉為對應比值的字符。這里的對應比值,就是要求使用的字符集中的字符,亮度應該均勻。
而字符的亮度,就取決于字符部分占字符全部部分的占比,占比越高,越亮,如下;
本文介紹,如何使用Python程序計算這個比值;
準備字符圖
首先,準備你需要的字符圖片,圖片大小應該僅包含字符內容,不能多,不能少;
以下圖片是我在Windwos畫圖工具里,敲一個字符,放到最大后,手動一個個截出來的,可能會有偏差,應該用PS會更好;
編碼
寫一個Python程序,做兩件事:
-
讀取圖片;
-
識別并統計非白色像素點RGB(255,255,255)的個數;
-
計算白點與所有像素點的占比;
如下:
import os
from PIL import Image# 通過圖片統計字符占比
def pic_rate(file_path):# 打開圖片im = Image.open(file_path)# 加載pix = im.load()# 獲取圖片的寬度,高度width = im.size[0]height = im.size[1]# 設置一個變量,用以表示"非白"像素格子的數量not_white = 0# 遍歷圖片的每一個像素for x in range(width):for y in range(height):# 取下像素格子的色值,并保存r, g, b = pix[x, y]rgb = (r, g, b)# 如果該像素格子不是白色,則變量+1if rgb != (255, 255, 255):not_white = not_white + 1# 返回"非白"格子占字符總格子數(width * height)的比值,并轉換為字符串且保留前四位return str((not_white / (width * height)))[:4]if __name__ == "__main__":# 輸入圖片路徑并讀取路徑下的所有字符文件path = r'D:\ShareMeeting\字母字符占比'file_list = os.listdir(path)# 設置一個字典記錄每一個字符的占比dic = {}# 循環執行pic_rate方法for file in file_list:dic[file] = pic_rate(path + '\\' + file)# 按字符比值從低到高排序dic_sort = (sorted(dic.items(), key=lambda x: x[1]))# 打印for num in dic_sort:print(num)
執行結果如下,可供參考;
總結
所以,如果你需要制作一張漂亮的字符動畫,就可以根據上面統計出來的字符占比,合理安排字符集的順序。比如你要用10個字符來作為字符集,就可以取占比為0.05、0.10、0.15、0.20……0.50 的字符各一個。