了解动态桌面壁纸

当macOS 10.14发布后,会发现系统带有动态桌面壁纸,设置后,我们的桌面背景将随着一天从早上、到下午、再到晚上的推移而发生微妙的变化。

虽然有些软件也有类似的动态变化效果,但是在新系统中默认的HEIC格式的动态壁纸体验更好。

  1. HEIC格式的文件更小、图像更清晰;
  2. 由于晨昏变化随着四季、地理位置并非一成不变,如果全年都按照一个节拍切换壁纸,其效果在绝大数日子里都将跟真实景象不同步。而Mojave的动态桌面,可以真正做到与当地的光照同步变化。理想情况下,切换的节奏与太阳运动、四季各不相同,并且根据用户的地理位置和日期,有选择地跳过一些不符合实际情况的照片。

动态桌面壁纸原理

MacOS Mojave动态桌面壁纸,是以太阳方位为标准,将对应的壁纸文件封装到heic文件中。

(1) 每套桌面壁纸包含16张静态图片(可以更多或更少),1个记录图片与太阳方位对应关系的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。

(2) 在json文件中,每张图片都标记了对应的太阳方位,即高度角(Altitude:太阳与地平线的夹角)方位角Azimuth:太阳按顺时针方向偏离正北的角度,通过这两个值确定太阳在天体中的位置。其关系图如下:

太阳在天体中的位置关系图

(3) 壁纸运行时,系统将根据用户的位置和时间计算太阳的实际方位,并与壁纸中标记的信息对比,展示最接近的壁纸图片。

动手做一个HEIC的动态壁纸

在GitHub上,开发者已开发了命令行工具,快速的制作heic动态桌面壁纸。原文:https://github.com/mczachurski/wallpapper

准备环境

  1. 使用macOS的电脑
  2. 安装了最新的XCode和Swift

安装软件包

打开终端工具,安装wallpapper软件包

Homebrew方式安装

brew tap mczachurski/wallpapper
brew install wallpapper

普通安装

自行确定好一个安装目录位置,进入进行安装

git clone https://github.com/mczachurski/wallpapper.git
cd wallpapper
swift build --configuration release
sudo cp .build/x86_64-apple-macosx/release/wallpapper /usr/local/bin

确定是否安装成功

我们可以在终端中输入”wallpaper -h”来测试,如果出现如下类似信息表示安装成功。

kim@Kims-MacBook ~ % wallpapper -h
wallpapper: [command_option] [-i jsonFile] [-e heicFile]
Command options are:
 -h            show this message and exit
 -v            show program version and exit
 -o            output file name (default is 'output.heic')
 -i            input .json file with wallpaper description
 -e            input .heic file to extract metadata

准备草料

Solar太阳坐标

对于跟随太阳坐标变化的动态壁纸,json文件必须具有类似下面的结构。

准备文件夹,将图片放在文件夹中,并且同级目录下创建json文件,结构如下:

[
  {
    "fileName": "1.png",
    "isPrimary": true,
    "isForLight": true,
    "altitude": 27.95,
    "azimuth": 279.66
  },
  {
    "fileName": "2.png",
    "altitude": -31.05,
    "azimuth": 4.16
  },
  ...
  {
    "fileName": "16.png",
    "isForDark": true,
    "altitude": -28.63,
    "azimuth": 340.41
  }
]
参数说明:
fileName: 图片名称
isPrimary: 是否是主图,其在创建heic文件后可见。一个heic文件中只有一个主图。
isForLight: 如果用户选择“Light模式(静态)”壁纸时,将显示该图片,也只能一张设置为true,可不设置。
isForDark: 如果用户选择“Dark模式(静态)”壁纸时,将显示该图片,也只能一张设置为true,可不设置。
altitude: 太阳的高度
azimuth: 太阳绕地平线的角度
altitude和azimuth可以在 https://keisan.casio.com/exec/system/1224682277 进行计算,你上传一张你当地拍摄的图片,可以查看图片的太阳信息,也可以看到我们所在地的全部时刻表与太阳方位的对应关系。如果使用apple手机,安装SkyGuide等天文APP也可以查询太阳方位。

Time系统时间

对于基于MacOS系统时间变化的壁纸,所使用的json结构如下:

[
    {
        "fileName": "1.jpg",
        "isPrimary": true,
        "isForLight": true,
        "time": "2025-05-21T23:00:00Z"
    },
    {
        "fileName": "2.jpg",
        "time": "2025-05-22T09:30:00Z"
    },
    {
        "fileName": "3.jpg",
        "isForDark": true,
        "time": "2025-05-22T12:00:00Z"
    }
]

参数:
fileName: 图片名称
isPrimary: 是否是主图,其在创建heic文件后可见。一个heic文件中只有一个主图。
isForLight: 如果用户选择“Light模式(静态)”壁纸时,将显示该图片,也只能一张设置为true,可不设置。
isForDark: 如果用户选择“Dark模式(静态)”壁纸时,将显示该图片,也只能一张设置为true,可不设置。
time: 壁纸变化的时间(重点是整时, 且要注意使用世界标准时间进行一个换算)。

T表示分隔符,Z表示的是UTC。
UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。

北京时间:2020-01-14 00:00:00对应的国际标准时间格式为:2020-01-13T16:00:00.000Z

Apperance系统外观

对于基于MacOS系统外观设置(Light/Dark)的壁纸,我们准备的json文件更加简单,只需要使用2个图像,1个用于Light模式,1个用户Dark模式。

[
    {
        "fileName": "1.png",
        "isPrimary": true,
        "isForLight": true
    },
    {
        "fileName": "2.png",
        "isForDark": true
    }
]
参数:
fileName: 图片名称
isPrimary: 是否是主图,其在创建heic文件后可见。一个heic文件中只有一个主图。
isForLight: 如果用户选择“Light模式(静态)”壁纸时,将显示该图片。
isForDark: 如果用户选择“Dark模式(静态)”壁纸时,将显示该图片。

生成HEIC文件

当准备好图片和json文件后,进入该目录,执行以下命令即可生成HEIC文件。

wallpapper -i wallpapper.json

我们就能得到HEIC文件,然后将壁纸放到MacOS的/Library/Desktop Pictures文件夹。这个文件夹就是Mac系统存放壁纸的地方,最后我们到设置壁纸设置就行啦~!


不想动手??那就取现成的吧~ 哈哈哈~ 资源地址:MacOS Wallpapper

最后修改:2025 年 05 月 22 日
-