轩_雨

青山不厌三杯酒,长日惟消一局棋
Mac更换鼠标指针样式_ANI、CUR文件解析

前情提要

因为之前写了一篇mousecape的博客有一些回应,所以我决定写个续。主要是教大家怎么把cur文件和ani文件插入到mousecape里面,顺便提供几个做好的cape文件。

先给大家推荐一个bilibili的视频教程,也是一种把Windows鼠标样式文件插入mousecape的方法,如果没有批量转换的需求,可以照他的来。

以罗小黑鼠标样式为例

一、把cur、ani文件转成ico、gif或png

  1. cur和ani文件格式

    cur文件最简单,因为它和ico的格式是一样的,当然也不完全是这样,有一些cur文件也是采用和ani一样的策略来存的,所以bilibili那篇教程上有人评论说cur也拖不进去(如果不太理解“拖不进去”以及后文一些描述的意思,可以先去看我的上一篇博客),就是因为有一些cur文件不是ico格式,所以要和ani做一样的解析。

  2. cur、ani的在线解析和工具解析

    reaConverter等鼠标样式编辑工具都可以把cur、ani转化成常见图片格式。但是不一定可以macOS上使用,也不能批量转换,比较不实用。

    另外有一种线上转换的方法,像https://ezgif.com/ani-to-gif等网站都提供了转换方法,但是也不能批量,更不能离线。批量我试过利用爬虫技术来解决,不过没能做到,有能力的朋友可以一试。

    上面bilibili的教程也是提供了这个方案,如果没有批量转换的需求,可以试一下。

  3. cur、ani命令行解析

    因为有些鼠标样式集都会有较多的ani文件,还是会有批量转换的需求,所以我还是想分享一个命令行解析的法子。而且主要是我看到csdn上居然有人拿这个格式转换的代码来收费,不忍大家花冤枉钱,所以要将方法公诸于众。

    github上有一个开源项目就是可以解析cur和ani的。虽然他的主要功能是做Windows和Linux鼠标样式文件的转化,但是稍微改造一下就可以把cur和ani转换成常见图片格式了。现在已经改造好了,放在gitee上,大家直接去下载就好。

    具体的使用方式建议参考README文档,这里我以罗小黑的鼠标指针样式为例做个介绍。

    大家可以先下载一下Win+罗小黑鼠标指针,如果链接失效可以私信索取。

    然后安装一下win2xcur_plus:

    pip install -e git+https://gitee.com/xuanyusan/win2xcur_plus.git#egg=win2xcur_plus
    

    先把cur文件转成ico,方便看:

    cd <Win+罗小黑鼠标指针 目录>
    rename "s/cur/ico/" *.cur
    # 顺便鉴定一下cur文件是不是ico格式,如果不是
    wincur2img --type png <非ico格式cur文件>
    

    ani则转成png长图:

    cd <Win+罗小黑鼠标指针 目录>
    ls | grep ani | while read name;do wincur2img --type apng $name;done;
    

    最后效果如下:

    ico

二、把ico文件和gif文件生成cape文件

有了gif或png文件就可以自己做cape文件了,具体怎么做可以看上一篇教程。

这次主要补充提一下几个bug和注意事项:

  1. FrameCount不能超过24

    Windows的ani文件对于帧数是比较宽松的,所以ani转png或gif,FrameCount可能会超。我在工具里是对24以上的做了抽帧处理,如果掉帧过于明显,还需要自己做一下优化。

  2. 应用变半透明的bug

    我们直接双击一个cape文件应用可能会导致样式变半透明,这时建议直接把文件拖到mousecape存放cape文件的目录下。

  3. 编辑变半透明的bug

    如果需要编辑一个鼠标样式,建议先做备份,然后再修改,改完把改动的地方复制到备份的文件里。

因为cape本质是一份xml文件,编辑也好,应用也好,可能会导致里面的data字段发生变化。具体的规律是如果cape文件里面有动图,编辑和应用就会导致data发生变化。下面贴一下xml的具体内容,图片数据就是放在array下的data字段,以base64的格式存储。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Author</key>
	<string>xuanyuwanqiu</string>
	<key>CapeName</key>
	<string>LuoXiaohei</string>
	<key>CapeVersion</key>
	<real>1</real>
	<key>Cloud</key>
	<false/>
	<key>Cursors</key>
	<dict>
		<key>com.apple.coregraphics.Arrow</key>
		<dict>
			<key>FrameCount</key>
			<integer>2</integer>
			<key>FrameDuration</key>
			<real>1</real>
			<key>HotSpotX</key>
			<real>0.0</real>
			<key>HotSpotY</key>
			<real>0.0</real>
			<key>PointsHigh</key>
			<real>32</real>
			<key>PointsWide</key>
			<real>32</real>
			<key>Representations</key>
			<array>
				<data>
				... ...
                                </data>
                       </array>
                </dict>
        </dict>
</dict>
</plist>

后记

因为变成cape文件需要指定图片和指针状态的关系以及HotSpot,所以就没办法自动化,但是这篇文章已经教大家把Windows鼠标样式文件变成macOS下能用的,相信已经足够了。我在的项目里提供了两个现成的cape文件给大家。

这些鼠标样式不知道会不会有版权问题,不然我也挺希望能建一个社区来放这些文件的,然后大家都可以来上传下载。为macOS社区贡献一些方案。有懂法律或者有想建站的可以来交流交流。

另外,如果关注这个东西人多的话,我会考虑想办法从代码层面修复一下mousecape的bug,而不是现在这种外部干扰的方法。

posted on 2021-11-28 12:04  轩_雨  阅读(4620)  评论(0编辑  收藏  举报