Python统计字符内容的占比的实现
作者:何中应
本文介绍了如何使用Python统计字符占比,包括字符串中字母、数字、空格等字符的占比,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
说明:如果有自己动手做过字符动画,会知道字符动画的“灵动性”核心在于使用的字符集。
简单来说,动画转为字符动画,原理是将动画转为灰阶图,灰度范围是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) # 如果该像素格子不是白色,则变量+1 if 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 的字符各一个。
到此这篇关于Python统计字符内容的占比的实现的文章就介绍到这了,更多相关Python统计字符占比内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!