前情提要
因為之前寫了一篇mousecape的博客有一些回應,所以我決定寫個續。主要是教大家怎么把cur文件和ani文件插入到mousecape里面,順便提供幾個做好的cape文件。
先給大家推薦一個bilibili的視頻教程,也是一種把Windows鼠標樣式文件插入mousecape的方法,如果沒有批量轉換的需求,可以照他的來。
以羅小黑鼠標樣式為例
一、把cur、ani文件轉成ico、gif或png
-
cur和ani文件格式
cur文件最簡單,因為它和ico的格式是一樣的,當然也不完全是這樣,有一些cur文件也是采用和ani一樣的策略來存的,所以bilibili那篇教程上有人評論說cur也拖不進去(如果不太理解“拖不進去”以及后文一些描述的意思,可以先去看我的上一篇博客),就是因為有一些cur文件不是ico格式,所以要和ani做一樣的解析。
-
cur、ani的在線解析和工具解析
reaConverter等鼠標樣式編輯工具都可以把cur、ani轉化成常見圖片格式。但是不一定可以macOS上使用,也不能批量轉換,比較不實用。
另外有一種線上轉換的方法,像https://ezgif.com/ani-to-gif等網站都提供了轉換方法,但是也不能批量,更不能離線。批量我試過利用爬蟲技術來解決,不過沒能做到,有能力的朋友可以一試。
上面bilibili的教程也是提供了這個方案,如果沒有批量轉換的需求,可以試一下。
-
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文件和gif文件生成cape文件
有了gif或png文件就可以自己做cape文件了,具體怎么做可以看上一篇教程。
這次主要補充提一下幾個bug和注意事項:
-
FrameCount不能超過24
Windows的ani文件對於幀數是比較寬松的,所以ani轉png或gif,FrameCount可能會超。我在工具里是對24以上的做了抽幀處理,如果掉幀過於明顯,還需要自己做一下優化。
-
應用變半透明的bug
我們直接雙擊一個cape文件應用可能會導致樣式變半透明,這時建議直接把文件拖到mousecape存放cape文件的目錄下。
-
編輯變半透明的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,而不是現在這種外部干擾的方法。