MacBook鼠标自定义配置导航:将Windows的光标文件转换为Mac使用的.cape文件

839 阅读4分钟

介绍


起因是我最近看了知名度很高的外网主播XQC玩一个虚拟恋爱恐怖游戏:MiSide

%E6%88%AA%E5%B1%8F2025-01-10_00.40.27.png

这游戏很棒,里面有一个角色:Kind Mita善良米塔,我很喜欢,于是我去X上搜了一下,结果就发现有人做了他的鼠标动画:

IMG_EF9608273752-1.jpeg

作者非常牛,我点进了这个网站打算下载他的光标动画,却发现Windows版本的是免费的,而MacOS版本要收费订阅。于是我很沮丧,开始研究起了如何将Windows的光标转换为Mac的光标。


在Windows和macOS系统中,光标的文件格式和机制有所不同:

Windows光标格式:ANI

  1. ANI文件

• 是Windows动画光标(Animated Cursor)的文件格式。

• 它基于CUR光标文件,扩展了动画功能,可以包含多个帧并定义帧速率。

• 常见于鼠标光标需要动态效果的场景,比如加载图标。

macOS光标格式:CAPE

  1. CAPE文件

• CAPE并不是macOS官方使用的光标文件格式。

• macOS的鼠标光标通常是系统内置的,定制性较低,没有开放的格式供用户直接修改。

• 自定义光标需要通过第三方应用(如Cursorcerer或Mousecape)来实现。

我个人mac之前用mousecape作为自定义光标工具,只需要导入.cape的格式文件就可以一键设置光标,.cape格式

%E6%88%AA%E5%B1%8F2025-01-10_00.55.56.png

为了将.ani格式转换为.cape格式,我做了这些事…


1. 寻找格式转换工具

  • 首先,在github上搜了一下,搜到了这位作者的小工具:

%E6%88%AA%E5%B1%8F2025-01-10_00.54.11.png

真是一下子就解决了,我兴奋的git clone了之后,python ani2cape.py,导出的cape文件拖进mousecape里,正当我以为大功告成的时候,悲剧的一幕出现了:

背景居然不是透明的!!!!!!是黑色的!

什么意思呢,就是这是我想要的结果:

%E6%88%AA%E5%B1%8F2025-01-10_01.00.40.png

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转换为这样:

image.png

纵向排列的一连串PNG,且背景是透明的!


3. 导入Mousecape,开始使用!

这样我们就可以把帧序列导入mousecape,这个软件能自动接受帧序列,然后创建**.cape格式的动画**

点击create cape,左下角的+号新建一个cape,然后把帧序列文件导入空格里

%E6%88%AA%E5%B1%8F2025-01-10_01.21.12.png

这里Type可以设置触发动画的时机,依据鼠标状态,例如Arrow是默认效果,IBeam是编辑文字的时候

Frames我使用的帧数是12,可以根据自己的帧序列有多少图片计算得出

Frame Duration .1 代表一次完整的动画时长,设置为100ms(0.1s)

Hot Spot一般不要改就好

Size设置图像的大小,我这里是32X32


设置完后点击保存,然后就可以愉快的使用新光标啦!

@Bao YuXiang 欢迎关注我的账号,以及我的个人博客(ethanbao27.github.io)

👍点赞支持一下吧!