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

Николай avatar | 15
FavoriteLoading В закладки
Как сделать динамические обои для 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.

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

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

P.S. Вот фон «Москва Сити», который получился у меня. (около 150 МБ)

1 Звезд2 Звезды3 Звезды4 Звезды5 Звезд (8 голосов, общий рейтинг: 4.63 из 5)
undefined
iPhones.ru
Это именно те, которые меняются по времени суток.
Прокомментировать

🙈 Комментарии 15

  1. control avatar
    control20 ноября 2018
    8

    Отличная статья, спасибо!

  2. ludvig99 avatar
    ludvig9920 ноября 2018
    2

    Результат-то покажите

  3. Arcerys avatar
    Arcerys20 ноября 2018
    6

    А есть ссылка на держатель монитора с первой картинки?
    Буду признателен =)

  4. Alexander Lebedev avatar
    Alexander Lebedev20 ноября 2018
    0

    есть же просто простая заставка которая делает это , установил и готово

  5. Kiri11 avatar
    Kiri1120 ноября 2018
    1

    Ну и где готовый набор динамических обоев?

  6. i3laze avatar
    i3laze20 ноября 2018
    0

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

  7. AnPhone avatar
    AnPhone20 ноября 2018
    2

    Кто-нибудь знает, что за кронштейн для монитора?

    simple_Ru avatar
    simple_Ru20 ноября 2018
    2

    @AnPhone, Ergotech Freedom Arm

    AnPhone avatar
    AnPhone20 ноября 2018
    0

    @simple_Ru, спасибо!

  8. Николай Грицаенко avatar
    2

    Добавил ссылку на фон «Москва Сити», который получился у меня.

  9. arlekino78 avatar
    arlekino7820 ноября 2018
    0

    а кто подскажет, что за моник?

  10. dwarf93 avatar
    dwarf9320 ноября 2018
    0

    у меня не проходит скрип

    Николай Грицаенко avatar
    0

    @dwarf93, на каком этапе?

    dwarf93 avatar
    dwarf9320 ноября 2018
    0

    @Николай Грицаенко, Ошибка возникает при сборке самого файла, прикрепить код не получается

    Николай Грицаенко avatar
    0

    @dwarf93, напишите в телегу @nickgric — постараемся разобраться

Вы должны авторизоваться или зарегистрироваться для комментирования.

Нашли орфографическую ошибку в новости?

Выделите ее мышью и нажмите Ctrl+Enter.

Как установить аватар в комментариях?

Ответ вот здесь