^

macOS Mojave, jak działają dynamiczne tapety

Redakcja

2 lipca 2018

Na tegorocznym WWDC Apple pokazało ciemny wygląd systemu (dark mode), który zostanie wprowadzony w nowym macOS Mojave (10.14). Tryb ten zmienia nie tylko górną belkę na ciemną (jak to jest obecnie), lecz wygląd wszystkich elementów systemu. Wraz z nim został wprowadzony bardzo ciekawy mechanizm: dynamiczne tapety.
macos-mojave-tapety

Wpis gościnny Marcina Czachurskiego.

macos-mojave-tapety-2

Czym są dynamiczne tapety w macOS Mojave

Polega on na tym, że wraz ze zmianą pory dnia zmienia się tapeta. Inna jest o wschodzie słońca, inna w południe a inna wieczorem i w nocy. Efekt jest bardzo ciekawy.
W systemie mamy niestety tylko jedną taką tapetę przygotowaną przez Apple (zdjęcia pustyni Mojave). Pojawia się tutaj pytanie czy istnieje możliwość przygotowania takiej tapety samemu?
Niestety Apple nie dostarczyło programistom żadnych informacji jak takie tapety tworzyć. Postanowiłem jednak sprawdzić jak zostały one zbudowane i czy na podstawie tych informacji uda się utworzyć taką tapetę samemu.
Wszystkie wbudowane tapety w macOS możemy znaleźć w folderze: /Library/Desktop Pictures. Również tutaj znajduje się nowa dynamiczna tapeta: Mojave (Dynamic).heic.
Widzimy, że dynamiczne tapety zapisane są w formacie HEIC. Więcej informacji na temat tego formatu możemy znaleźć na stronach Wikipedii. Jest to dokładnie ten sam format pliku, który Apple używa do zapisywania zdjęć (również live photos) w iOS. Ten rodzaj pliku może zawierać w sobie wiele zdjęć, ich miniaturki oraz dodatkowe metadane.

Jak działają dynamiczne tapety w macOS Mojave

Aby sprawdzić zawartość systemowej tapety możemy skorzystać z narzędzia dostępnego w sieci: https://strukturag.github.io/libheif/. Po przesłaniu tam pliku HEIC widzimy, że zawiera on 16 różnych zdjęć pustyni, zrobionych o różnych porach dnia.
macos-mojave-tapety-04
Aby sprawdzić, czy oprócz zdjęć w tapecie dostarczanej przez Apple znajdują się jakieś dodatkowe informacje skorzystałem z biblioteki libheif. Wykorzystałem w tym celu (zmodyfikowaną przeze mnie) aplikację heif-info. Poniżej zamieszczam wynik jej działania.

Number of top level images: 16
image #0
id: 61
width: 5120
height: 2880
is primary: yes
number of metadata: 1
metadata type: mime
content type: application/rdf+xml
metadata size: 3302
metadata content:
image #1
id: 123
width: 5120
height: 2880
image #2
id: 184
width: 5120
height: 2880
image #3
id: 245
width: 5120
height: 2880
image #4
id: 306
width: 5120
height: 2880
image #5
id: 367
width: 5120
height: 2880
image #6
id: 428
width: 5120
height: 2880
image #7
id: 489
width: 5120
height: 2880
image #8
id: 550
width: 5120
height: 2880
image #9
id: 611
width: 5120
height: 2880
image #10
id: 672
width: 5120
height: 2880
image #11
id: 733
width: 5120
height: 2880
image #12
id: 794
width: 5120
height: 2880
image #13
id: 855
width: 5120
height: 2880
image #14
id: 916
width: 5120
height: 2880
image #15
id: 977
width: 5120
height: 2880

Widać więc, że pierwsze zdjęcie zamieszczone w pliku dołączone ma dodatkowe informacje zapisane jako XML. Szczególnie intrygujące jest to, co Apple zapisało w znaczniku apple_desktop:solar. Po chwili zabawy okazało się, że jest to zawartość binarnego pliku plist zakodowanego w standardzie base64. Pliki te są bardzo często używane przez Apple oraz programistów do przechowywania informacji w formacie: klucz – wartość.
Aby zamienić zawartość znacznika na coś zrozumiałego przez ludzi można wykonać poniższe dwa polecenia (najpierw utworzyć musimy plik text.base64, do którego zapisać musimy zawartość znacznika).

base64 -D text.base64 -o decoded.txt
plutil -convert son decoded.txt

Dzięki temu widzimy, że Apple w pliku plist przechowuje listę dodatkowych informacji. Dla domyślnej tapety jest to tablica 16 dodatkowych elementów (poniżej znajdują się dwa z nich).

{
"si": [
{
"i": 0,
"z": 270.9334057827345,
"a": -0.3427528387535028,
"o": 1
},
(...)
{
"i": 15,
"z": 53.50908581251309,
"a": -38.04743388682423,
"o": 0
}
]
}

Widzimy, że każdy element zawiera cztery dodatkowe właściwości:
• i – indeks zdjęcie, którego dotyczy dana grupa
• a – altitude
• z – azimuth
• o – informacja o tym w jakim trybie dane zdjęcie ma być widoczne (1 – tylko w trybie jasnym, 0 – w obu trybach)
Dzięki informacji o azymucie astronomicznym (azimuth) oraz o wysokości astronomicznej (altitude) wiemy dokładnie gdzie było słońce w momencie robienia zdjęcia.
macos-mojave-tapety-05

Będziemy mogli sami tworzyć dynamiczne tapety

To rozwiązanie jest genialne, zdjęcia będą zmieniać się o innych porach zimą oraz o innych latem. System operacyjny wie gdzie jesteśmy, a dzięki temu, gdzie znajduje się nad nami słońce. Może pokazać nam zdjęcie, które było zrobione w najbardziej zbliżonych warunkach. Są to szczegóły, za które tak lubimy Apple.
Znając wszystkie powyższe informacje przygotowałem bardzo naiwną aplikację konsolową w Swift (której kod źródłowy można podejrzeć tutaj). Tworzy ona z 16 zdjęć oraz dodatkowych metadanych plik HEIC. Możemy następnie plik taki ustawić jako tło pulpitu i cieszyć się swoją własną tapetą dynamiczną.
Poniżej zamieszczam video ukazujące tapetę, którą zrobiłem (użyłem zdjęć w wysokiej rozdzielczości dostępnych na tej stronie, są to zdjęcia wykonane przez satelitę pogodowego Himawari-8).

Widać, że tworzenie własnych tapet dynamicznych będzie możliwe. Zapewne większa ich ilość będzie pojawiać się po oficjalnej premierze macOS Mojave.
Oficjalna witryna systemu macOS Mojave – www.apple.pl

Redakcja

Tworzymy dla Ciebie serwis Mój Mac. Strona z informacjami o Apple i technologii. Opinie, recenzje i testy. Wszystko, co chcesz wiedzieć o świecie nadgryzionych jabłek.
Komentarze (0)
L

0 komentarzy