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,而不是現在這種外部干擾的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM