使用Python统计字符内容的占比

news2025/5/24 13:14:59

说明:如果有自己动手做过字符动画,会知道字符动画的“灵动性”核心在于使用的字符集。

简单来说,动画转为字符动画,原理是将动画转为灰阶图,灰度范围是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 的字符各一个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构OJ题】链表的中间结点

原题链接:https://leetcode.cn/problems/middle-of-the-linked-list/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 快慢指针法 通过快慢指针找到中间结点,快指针每次走两步,慢指针每次走一步&#…

ignition gazebo || 解决ignition gazebo启动后所有图标都是黑方块的问题

问题: 启动ignition gazebo出现图表全黑的情况 ign gazebo 解决方案 sudo apt install aptitude aptitude是一款针对debian系系统的系统依赖管理更加有效的包管理工具。我建议以后都使用aptitude进行包管理。 下面正式开始解决问题。 出现这个问题毫无疑问是qt…

java的类和对象详解

一、java是面向对象的编程语言 首先一般的编程语言有两种,一种是面向对象,一种是面向过程。前者更加关注代码中对象与对象之间关系与协作,而后者更加注重代码的执行过程。 举个例子 传统的方式:注重的是洗衣服的过程,…

BUUCTF [CISCN2019 华东南赛区]Web11

分析 上面可以看出这是Smarty模板引擎 看到这个ip我们应该想到使用X-Forwarded-For字段 X-Forwarded-For 是一个 HTTP 扩展头部,用来描述请求者的ip 如果后端认为这个是我们的真实ip并使用Smarty来回显那么就可能造成了SSTI 当我们设置了 X-Forwarded-For: {{11}}时…

【EI/SCOPUS检索】2023年第二届光学成像与测量国际会议 (ICOIM2023)

2023年第二届光学成像与量国际会议 (ICOIM2023) 2023 2nd International Conference on Optical Imaging and Measurement 光学成像与测量密切相关且具有广泛的应用,如显微镜、望远镜、传感器等。通常,成像是测量的基础&#xf…

Python - 多线程,多进程中的join和Event及没有使用join和event区别

一. 前言 在Python的多线程和多进程编程中,join() 和 Event 都是用来控制线程或进程之间的同步关系的工具,它们的作用类似,但还是有一些区别。 二. 概念 1. join() join() 方法是线程或进程实例的一个方法,用于阻塞当前调用线…

6. 自定义异常 全局异常处理 测试异常处理

目录 1. 自定义异常 2. 全局异常处理 3. 测试异常处理 1. 自定义异常 创建⼀个异常类,加入状态码与状态描述属性。 凡是业务代码中出现的可预期的异常,统一抛出 ApplicationException public class ApplicationException extends RuntimeException{//…

[Java优选系列第1弹]如何优化Java三层架构开发效率?三个实用技巧分享

💞优选系列制作漫长,每篇一经写出不再创作,均是呕心沥血制作,且看且珍惜💫 一直在等你,你终于来啦💖 绿色代表解释说明 黄色代表重点 红色代表精髓 Java三层架构…

qt 安 装

之后版本都是在线安装 下载地址 Index of /archive/online_installers 只用这三个即可,其他不用管默认

操作系统-笔记-第一章-操作系统的概念

目录 一、第一章——操作系统的概念 1、操作系统的概念、功能 (1)层次 (2)总结 2、操作系统的特征(4个) (1)并发与并行 (2)共享与互斥 (3…

【网络基础实战之路】基于MPLS-VPN技术实现两个私网间互通的实战详解

系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…

主流的嵌入式微处理器

目前主流的嵌入式微处理器系列有: ARM系列 MIPS系列 PowerPC系列 Super H系列 一、MPC/PPC系列 PowerPC(简称PPC),其基本设计源自IBM的POWER.1991年,APPLE(苹果电脑)、IBM、Motorola(摩托罗拉)组成的AIM联盟发展出Power微处理器…

Windows Server 2019设置使用照片查看器查看图片的设置方法

1、使用winR快捷键快速打开运行,输入regedit打开注册表: 2、在注册表中找到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations 3、在右侧新建字符串项: 4、例如新建两项.jpg 和.png值…

eNSP:mpls综合实验

实验要求&#xff1a; 拓扑图 路由、IP配置 r1: <Huawei>sys [Huawei]sys r1 [r1]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int g 0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.2.1 30[r1]ip route-static 192.168.3.0 30 192.168.2.2 [r1]ip rou…

生信豆芽菜-TIP预测免疫

网址&#xff1a;http://www.sxdyc.com/immuneTipScore 一、TIP预测免疫的介绍 TIP&#xff08;Tumor Immune Prediction&#xff09;是一种用于预测肿瘤免疫状态的计算方法。它通过分析基因表达数据来推断肿瘤样本中的免疫细胞浸润情况和免疫反应程度。 TIP的基本原理如下&…

HTML中的字符串转义

为什么要转义&#xff1f; 转义可以防止 xss 攻击。接下来&#xff0c;我们来看一下如何转义。 HTML Sanitizer API Sanitizer 是浏览器自带的转义方法&#xff0c;在2021年初被提出&#xff0c;兼容性问题很大。 列举几个常用的 API&#xff1a; const $div document.qu…

RTC实验

一、RTC简介 RTC(Real Time Clock)即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电BCD码&#xff0c;四位二进制表示一位…

Cesium--一些实验过程中的效果记录

1.一种反射效果&#xff1a; 片元着色器代码 fragmentShaderSource:in vec3 v_positionMC;in vec3 v_positionEC;in vec2 v_st;void main(){czm_materialInput materialInput;vec3 normalEC normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), ve…

从零开始,外贸邮件营销如何做?

邮件营销是外贸企业开发新用户和维系老客户非常有效的方法之一&#xff0c;因其操作方便快捷、成本低廉且精准投放的特性&#xff0c;已成为外贸行业的必备营销手段。但如何才能利用好邮件营销&#xff0c;让邮件营销的作用发挥到最大呢&#xff1f;今天U-Mail李工就跟大家分享…