Как сделать динамические обои для macOS Mojave самому

Вместе с темной темой оформления интерфейса одним из главных нововведений macOS Mojave оказались динамические фоны для рабочего стола Mac, которые меняются по времени суток. Тема — огонь. Жаль, Apple пока не доработала ее до конца.

Сейчас у нас нет возможности добавлять новые динамические фоны самостоятельно, поэтому приходится пользоваться лишь двумя встроенными.

Хотя, нет! Мы уже нашли способ обойти это нелепое ограничение, и с удовольствием рассказываем о нем вам.

Из чего состоит динамический фон для macOS Mojave


Папка со стандартными фонами для рабочего стола «Библиотеки» > «Desktop Pictures»

Он упакован в файл HEIC. Все стандартные фоны для рабочего стола Mac хранятся в папке «Библиотеки» > «Desktop Pictures». Динамические: «Mojave.heic» и «Solar Gradients.heic». Пару десятков статичных с расширением *.jpg.

Что такое HEIC? Это свежий формат для эффективного сжатия изображений, о котором заговорили в 2013 году. Apple начала его внедрение на пару с HEIF для видео с выходом iOS 11 в 2017, и сегодня вовсю использует:

  • В первую очередь, HEIC интересен до двух раз меньшим размером изображений, в сравнении с JPG, с сохранением качества.
  • Во вторую очередь, он полезен возможностью использования в качестве пакета.

В пакете формата HEIC Apple хранит живые фотографии, в которых кроме изображения есть также видеозапись с парой секунд до и после спуска затвора. В нем же спрятаны элементы динамического фона macOS Mojave.


Набор из 16-ти изображений для динамического фона «Mojave.heic»

Внутри него 16 изображений. Основой динамического фона стал набор изображений, которые меняются по времени суток. Извлечь их из файла HEIC вам поможет сервис Libheif Decoder, который пока находится в состоянии demo.

Вы можете загрузить в него один из стандартных динамических фонов macOS Mojave («Mojave.heic» или «Solar Gradients.heic») и разобрать на отдельные изображения формата JPG или PNG с разрешением 5120×2880 точек.

Так вы сможете выбрать для домашнего экрана любую картинку из набора.

Когда мы разобрали пакеты фонов на отдельные изображения, нам сразу показалось, что можно собрать новый HEIC из набора картинок, и все заработает. В этом нам помог наш читатель Роман П., но фотографии отказались меняться по времени.

Когда мы копнули немного глубже, оказалось, что кроме изображений, в пакете также хранится текстовый файл странного содержания.


Пример файла-объяснения

Еще в нем хранится файл-объяснение. Чтобы macOS Mojave меняла изображения по времени, операционной системе нужно объяснить, какие картинки из набора нужно взять, и к какому времени они привязаны.

Для этого используется специальный файл в текстовом формате, в котором хранится информация о положении солнца над конкретной точкой и изображении, к которому привязаны эти координаты.

Без него в качестве фона для рабочего стола весь день будет показываться только главное (скорее всего, первое) изображение из пакета HEIC.

Дальше мы научимся создавать его, но сначала разберемся с изображениями для динамического фона.

Для начала нам нужно подготовить 16 изображений


Картинки после разборки файла «Mojave.heic»

Лучше всего сделать 16 фото. Чтобы создать динамический фон «mojave.heic», Apple взяла одну пустыню Мохаве и одного профессионального фотографа с неплохой зеркальной камерой, которая могла бы справиться с ночной съемкой.

Он провел в одной точке пустыни с неподвижной камерой на штативе пару дней, чтобы в итоге выбрать 16 удачных кадров, которые лучше всего передавали бы время суток.

Быть может, история была немного другой, и над динамическим фоном работала целая команда фотографов, но смысл тот же.


Чтобы протестировать процесс, для начала вы можете просто использовать такой набор изображений

В идеале вы должны поступить аналогично. Взять свой iPhone и штатив для него, установить смартфон напротив интересной локации для будущего фона и снимать ее весь день напролет.

После этого нужно выбрать 16 снимков, которые будут соответствовать временной сетке (часы и минуты пишу ориентировочно).

Временная сетка для динамического фона:

  • Изображение 1 — 06:00, первые лучи
  • Изображение 2 — 07:00, рассвет
  • Изображение 3 — 08:00, утро
  • Изображение 4 — 09:00, утро
  • Изображение 5 — 10:00, день
  • Изображение 6 — 11:00, день
  • Изображение 7 — 12:00, полдень
  • Изображение 8 — 13:00, день
  • Изображение 9 — 14:00, день
  • Изображение 10 — 15:00, день
  • Изображение 11 — 16:00, день
  • Изображение 12 — 17:00, закат
  • Изображение 13 — 18:00, сумерки
  • Изображение 14 — 19:00, ночь
  • Изображение 15 — 20:00, ночь
  • Изображение 16 — 21:00, ночь

Временная сетка для динамического фона пригодится нам в дальнейшем, поэтому сохраните ее себе.


Картинки после разборки файла «Solar Gradients.heic»

Можно немного схитрить. Если сделать 16 разных кадров самостоятельно не получается, можете найти готовый набор в сети или попросить заняться этим знакомого фотографа или дизайнера. Но нам пришла в голову более интересная идея.

Когда мы разобрали динамический фон «Solar Gradients.heic» с помощью Libheif Decoder, сразу поняли, что набор изображений с градиентом из него можно использовать, чтобы раскрасить необходимыми цветами по часам любой снимок.


Знаю, небо все равно остается светлым, пока не придумали, что с этим делать

Мы взяли фотографию Москва-Сити и через Adobe Photoshop добавили на нее отдельным слоем по очереди все 16 градиентов в режиме наложения «Перекрытие».

Получился отличный набор, который будет достойно выглядеть на рабочем столе Mac в разное время суток.

Потом нам придется создать особый файл-объяснение


Работа над файлом-объяснением «Wallpaper.json»

Чтобы создать файл-объяснение для динамического фона, вам понадобиться любой текстовый редактор. С помощью него вы должны будете прописать имена файлов и их свойства, которые помогут сориентироваться операционной системе.

Вот пример текста, который получился у меня:

[ {
«fileName»: «mojave_dynamic — 001.png»,
«isPrimary»: true,
«isForLight»: true,
«isForDark»: false,
«altitude»: -12.3,
«azimuth»: 105.62
},
{
«fileName»: «mojave_dynamic — 002.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: -2.92,
«azimuth»: 116.76
},
{
«fileName»: «mojave_dynamic — 003.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 5.02,
«azimuth»: 128.43
},
{
«fileName»: «mojave_dynamic — 004.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 11.71,
«azimuth»: 141.00
},
{
«fileName»: «mojave_dynamic — 005.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 16.76,
«azimuth»: 154.64
},
{
«fileName»: «mojave_dynamic — 006.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 19.71,
«azimuth»: 169.22
},
{
«fileName»: «mojave_dynamic — 007.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 20.24,
«azimuth»: 184.27
},
{
«fileName»: «mojave_dynamic — 008.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 18.30,
«azimuth»: 199.12
},
{
«fileName»: «mojave_dynamic — 009.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 14.09,
«azimuth»: 213.19
},
{
«fileName»: «mojave_dynamic — 010.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 8.03,
«azimuth»: 226.20
},
{
«fileName»: «mojave_dynamic — 011.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 4.48,
«azimuth»: 232.32
},
{
«fileName»: «mojave_dynamic — 012.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: 0.81,
«azimuth»: 238.21
},
{
«fileName»: «mojave_dynamic — 013.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: -8.29,
«azimuth»: 249.51
},
{
«fileName»: «mojave_dynamic — 014.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: -17.47,
«azimuth»: 260.53
},
{
«fileName»: «mojave_dynamic — 015.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: false,
«altitude»: -26.97,
«azimuth»: 271.86
},
{
«fileName»: «mojave_dynamic — 016.png»,
«isPrimary»: false,
«isForLight»: false,
«isForDark»: true,
«altitude»: -36.41,
«azimuth»: 284.27
}]

Поля для изображения:

  • fileName — имя файла
  • isPrimary — главное изображение в HEIC (может быть только одно)
  • isForLight — главное изображение, которое будет использоваться для светлой темы ОС в статичном формате (может быть только одно)
  • isForDark — главное изображение, которое будет использоваться для темной темы ОС в статичном формате (может быть только одно)
  • altitude — угол Солнца относительно горизонта Земли
  • azimuth — угол Солнца относительно нулевого меридиана Земли

Значения «altitude» и «azimuth» в конкретных месте, дате и времени можно определить, используя временную сетку для динамического фона выше по тексту и специальный онлайн-калькулятор Keisan от Casio.

Готовый код необходимо сохранить в текстовый файл с именем «Wallpaper.json» — расширение JSON можно задать переименованием через Finder.

После нужно упаковать все это в динамический фон


К сожалению, добиться отображения превью динамического фона мы так и не смогли… Есть идеи?

Последним шагом в создании нового динамического фона окажется создание пакета HEIC с подборкой из 16-ти изображений (PNG, 5120×2880) и файлом-объяснением («Wallpaper.json») — картинки и текстовый документ должны находиться в одной папке.

В этом нам поможет специальный SWIFT-скрипт, который создал разработчик Marcin Czachurski. Его творение давно лежит на GitHub. Его не нужно скачивать, просто установите с помощью команды для «Терминала»:

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

После этого запустите еще одну команду для «Терминала»:

wallpapper -i папка/wallpapper.json


В данном случае «папка/wallpapper.json» — полный путь к файлу, который можно получить, перетащив его в окно «Терминала»

Когда скрипт закончит работу, вы получите файл «output.heic» в папке «Пользователи» > имя пользователя > «wallpapper».

Его нужно переместить в папку «Библиотеки» > Desktop Pictures, а после задать в качестве динамического фона через меню «Системные настройки» > «Рабочий стол и заставка».

Краткая инструкция:

1. Найдите 16 картинок одного и того же места в разное время суток. Переведите их в PNG и разрешение 5120×2880.

Переименуйте их от »1.png» до »16.png».»2.png» будет символизировать рассвет,»7.png» — полдень,»12.png» — закат, а остальные станут промежуточными.

2. С помощью текстового редактора создайте файл «wallpapper.json» с этим текстом.

3. Через «Терминал» запустите сначала этот скрипт:

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

Потом этот скрипт («папка/wallpapper.json» — полный путь к файлу):

wallpapper -i папка/wallpapper.json

4. Скопируйте файл «output.heic» из папки «Пользователи» > имя пользователя > «wallpapper» в папку «Библиотеки» > Desktop Pictures.

Установите файл в качестве фона стандартными средствами.

Готово! Получилось?

Похвали автора1

Оставайся в теме. Подпишись на наш Telegram

©  iphones.ru