虽然动态屏保不是什么新鲜事儿,但是自从 macOS 10.14 发布后,这种随着时间慢慢变化的动态屏保还是蛮有意思的。
但目前macOS 仅仅提供了两个动态屏保。
而有些软件也在销售类似的动态屏保的App,但都没有系统默认的这种 HEIC 封装文件好
首先 HEIC 是个全新的文件格式,压缩更好,相同图片文件更小。
在macOS系统的默认沙漠的动态壁纸就是这么个 HEIC 封装的图像文件。
mojave的HEIC文件内封装了16张图片用来按照不同的时间切换壁纸
那问题就来了, macOS的系统是如何判断合适更换壁纸呢?
是时间吗?
并不是。
这里有个非常聪明的做法就是,因为全球你在的维度不一样其实相同的时间看到的太阳的高度是不同的。
所以苹果采用的是太阳的高度与纬度的夹角来更换对应的壁纸。
HEIC封包里面,除了16张依次为 0.png .... 16.png 的图片外,还有一个json文件。
里面记录着图像显示的信息
<dict>
<key>a</key>
<real>-38.04743388682423</real>
<key>i</key>
<integer>15</integer>
<key>o</key>
<integer>0</integer>
<key>z</key>
<real>53.509085812513092</real>
</dict>
a 是 altitude 高度
z 是 azimuth 角度
获取你拍摄照片时候太阳的信息可以在如下网站生成
https://keisan.casio.com/exec/system/1224682277
--
好了大概知道了, HEIC 文件的信息了。
所以自制一个动态的桌面,需要16张拍摄好的照片。
与 设计好的 JSON 文件。 随后打开终端。
输入
brew tap mczachurski/wallpapper brew install wallpapper
--
随后准备好16张图片后,在图片相同目录内创建JSON文件。
[
{
"fileName": "1.png",
"isPrimary": true,
"isForLight": true,
"isForDark": false,
"altitude": 27.95,
"azimuth": 279.66
},
{
"fileName": "2.png",
"isPrimary": false,
"isForLight": false,
"isForDark": false,
"altitude": -31.05,
"azimuth": 4.16
},
...
{
"fileName": "16.png",
"isPrimary": false,
"isForLight": false,
"isForDark": true,
"altitude": -28.63,
"azimuth": 340.41
}
]
然后打开终端输入
wallpapper -i wallpapper.json
即可生成 output.heic 图像文件就可以直接做成动态桌面使用了。
好了。理论够了, 我现在就期盼来阵风,我就要去拍照了。
大家可以说一下想拿北京哪个景点做动态桌面。
请问是怎么heic图片是怎么分解成子图的