介绍
起因是我最近看了知名度很高的外网主播XQC玩一个虚拟恋爱恐怖游戏:MiSide
这游戏很棒,里面有一个角色:Kind Mita善良米塔,我很喜欢,于是我去X上搜了一下,结果就发现有人做了他的鼠标动画:
作者非常牛,我点进了这个网站打算下载他的光标动画,却发现Windows版本的是免费的,而MacOS版本要收费订阅。于是我很沮丧,开始研究起了如何将Windows的光标转换为Mac的光标。
在Windows和macOS系统中,光标的文件格式和机制有所不同:
Windows光标格式:ANI
- ANI文件:
• 是Windows动画光标(Animated Cursor)的文件格式。
• 它基于CUR光标文件,扩展了动画功能,可以包含多个帧并定义帧速率。
• 常见于鼠标光标需要动态效果的场景,比如加载图标。
macOS光标格式:CAPE
- CAPE文件:
• CAPE并不是macOS官方使用的光标文件格式。
• macOS的鼠标光标通常是系统内置的,定制性较低,没有开放的格式供用户直接修改。
• 自定义光标需要通过第三方应用(如Cursorcerer或Mousecape)来实现。
我个人mac之前用mousecape作为自定义光标工具,只需要导入.cape的格式文件就可以一键设置光标,.cape格式
为了将.ani格式转换为.cape格式,我做了这些事…
1. 寻找格式转换工具
- 首先,在github上搜了一下,搜到了这位作者的小工具:
真是一下子就解决了,我兴奋的git clone了之后,python ani2cape.py,导出的cape文件拖进mousecape里,正当我以为大功告成的时候,悲剧的一幕出现了:
背景居然不是透明的!!!!!!是黑色的!
什么意思呢,就是这是我想要的结果:
32X32像素的图片序列(spritesheet),png格式,后面是透明的,然而上述代码运行了之后,原来适用于windows的.ani格式转换为cape竟然不是透明的…
为了达到透明的效果,我这里采用了一个笨办法,不过希望还是能给大家提供一点帮助:
2. ani先转换为gif
我使用的是在线格式转换工具 ezgif.com/ani-to-gi
它的ANI to GIF功能导出的gif是透明背景的,然后我再把每一个小gif动画用刚才的python脚本gif2SpriteSheet,转换为了帧序列
什么是帧序列
这里的SpriteSheet,制作过像素动画的或者玩过unity 2d的人应该都知道,是指一组按照一定顺序排列的图像帧(Frames),这些帧依次快速切换,形成连续的动画效果。帧序列广泛应用于计算机动画、游戏开发、视频制作等领域。
特性
| 组成单位 | 每个帧是静态图像,可以是位图、矢量图或其他图像格式(PNG) |
|---|---|
| 帧速率 | 帧之间的切换速度通常以“帧每秒”(Frames Per Second,FPS)表示 |
| 连续性 | 帧序列按照顺序排列,每一帧展示一部分动作变化,通过快速播放给人以动态效果 |
| 循环性 | 有些帧序列是循环播放的,比如动态光标动画 |
显然,我们要做的光标自定义动画是循环、且连续的帧序列,调用上述函数就可以将GIF转换为这样:
纵向排列的一连串PNG,且背景是透明的!
3. 导入Mousecape,开始使用!
这样我们就可以把帧序列导入mousecape,这个软件能自动接受帧序列,然后创建**.cape格式的动画**
点击create cape,左下角的+号新建一个cape,然后把帧序列文件导入空格里
这里Type可以设置触发动画的时机,依据鼠标状态,例如Arrow是默认效果,IBeam是编辑文字的时候
Frames我使用的帧数是12,可以根据自己的帧序列有多少图片计算得出
Frame Duration .1 代表一次完整的动画时长,设置为100ms(0.1s)
Hot Spot一般不要改就好
Size设置图像的大小,我这里是32X32
设置完后点击保存,然后就可以愉快的使用新光标啦!
@Bao YuXiang 欢迎关注我的账号,以及我的个人博客(ethanbao27.github.io)
👍点赞支持一下吧!