Dzień dobry, dziś opiszę swoje zmagania z plikami .heic z iPhone 15, które próbowałem otworzyć na Fedorze 41, ale program do podglądu zdjęć zgłaszał, że nie może otworzyć plików (nie robiły się też miniatury). Ostatecznie walka zepsuła mi miły rodzinny wieczór.

próby rozwiązania problemu

  • próba przekonwertowania z XnConvert MP (z Flathub) się nie powiodły - program podczas próby konwersji zgłasza 0x0x0 : nie jest obrazem dla każdego pliku
    • zaskoczyło mnie to, bo kiedyś już konwertowałem tym programem zdjęcia z iPhone, ale to było kilka lat temu - może wtedy heice były bardziej kompatybilne
  • mimo że ImageMagick zgłasza, że obsługuje format heic (sprawdzane poleceniem magick -version), to użycie go do konwertowania nie powodzi się
    • użycie polecenia magick zdj.heic zdj-wyjsciowe.jpg
    • zwracany komunikat magick: no decode delegate for this image format 'HEIC' @ error/constitute.c/ReadImage/746.
    • doinstalowanie ImageMagick-heif i libheif nic nie pomaga
    • doinstalowanie libheif-devel i libheif-tools nic nie daje
  • libheif-tools dostarcza dodatkowe narzędzia do przetwarzania heifów
    • heif-dec, służący do dekodowania heiców, wciąż nie może zdekodować zdjęcia - Could not decode image: Error while loading plugin: No decoding plugin installed for this compression format
    • heif-dec --list-decoders zwraca informację, że nie ma żadnego dekodera dla formatu HEIC
$ heif-dec --list-decoders
AVC decoders:
- openh264 = OpenH264 2.4.1
AVIF decoders:
- dav1d = dav1d v7.0.0
- aom = AOMedia Project AV1 Decoder v3.12.0
HEIC decoders:
JPEG decoders:
- jpeg = libjpeg-turbo 3.0.2 (libjpeg 6.2)
JPEG 2000 decoders:
- openjpeg = OpenJPEG 2.5.3
JPEG 2000 (HT) decoders:
- openjpeg = OpenJPEG 2.5.3
uncompressed:
- uncompressed = builtin
VVIC decoders:

rozwiązanie

Trzeba było zainstalować dodatkowo libheif-freeworld, które dostępne jest dostępne w repozytorium rpmfusion-free i rpmfusion-free-updates. libheif-freeworld dodatkowo doinstalowuje libde265 i to jest kluczowy element do zdekodowania tych obrazów.

Po zainstalowaniu tych dwóch paczek, zdjęcia normalnie zaczęły się otwierać w przeglądarce zdjęć. Można je było też zdekodować z użyciem heif-dec.

UWAGA: dekodowanie z heif-dec usuwa metadane. Można użyć opcji --with-exif, ale ona nie osadza metadanych w pliku wyjściowym, a jedynie jako osobny plik .exif. Dodatkowo, domyślnie jakość wynikowego zdjęcia jest niższa niż źródłowego - chcąc wysoką jakość, trzeba dodatkowo użyć opcji -q|--quiality 100 (plik wynikowy jest wtedy znacznie większy od źródłowego).

UZASADNIENIE PROBLEMU: HEIF to tak naprawdę tylko kontener dla multimediów. W środku może znajdować się zdjęcie zakodowane jako JPG (wtedy prawdopodobnie otwierać się będzie bez opisanych tutaj kłopotów), ale w przypadku iPhone zdjęcia są zakodowane z użyciem HEVC, który chroniony jest różnymi patentami, dlatego jego dekodery nie są dostępne w standardowych repozytoriach Fedory - konieczne jest posiadanie skonfigurowanych repozytoriów RPM Fusion.

strony projektów:

alternatywne rozwiązanie (z użyciem iPhone)

iPhone podczas przekazywania problematycznego zdjęcia do innej aplikacji (nie dotyczy systemowej aplikacji Pliki), konwertuje cichaczem zdjęcie do formatu .jpg - na przykład podczas próby wysłania zdjęcia mailem. Podczas tego procesu użytkownik nie jest wprost informowany o zachodzącej konwersji.

Jeśli potrzebujemy kilku zdjęć, wysłanie ich sobie mailem może wystarczyć, ale jak zdjęć jest kilkaset, to potrzeba czegoś innego. W moim przypadku użyłem programu Documents od Readdle bo podczas przekazywania plików do niej, zdjęcia też się konwertują. Można tak zaznaczyć ich wiele i je przekazać do tej aplikacji i potem z jej przestrzeni te zdjęcia zgrać - nie wiem czy da się na kablu, ale można użyć połączenia zdalnego po sieci lokalnej (dostępne w interfejsie programu Documents).

Takie zdjęcia mają swoje metadane i jakościowo prawdopodobnie nie odbiegają znacznie od oryginału.

chyba najlepsze rozwiązanie (z użyciem iPhone)

Jeszcze lepszy jednak sposób to ustawić w iPhone, żeby podczas podłączania do nie-maka od razu serwował .jpg zamiast heiców - taka konwersja odbywa się transparentnie i z punktu widzenia komputera na naszym telefonie są po prostu jotpegi (sprytne to, nie ukrywam).

To rozwiązanie, które poznałem najpóźniej - więcej o tych ustawieniach jest na stronie Aple.

Przestaw to w Ustawieniach: Aplikacje -> Zdjęcia -> Przenieś na Maca lub PC -> Automatycznie (zamiast Pozostaw oryginały).

Miałem wrażenie jednak, że podczas takiego użycia połączenie nie działało do końca stabilnie.

jak ogólnie uniknąć komplikacji

Jeśli nie masz maka albo masz maka, ale nikt inny z Twojego otoczenia go nie ma, to moim zdaniem najlepiej jest przestawić format zapisywania zdjęć: Ustawienia -> Aparat -> Formaty -> Najbardziej zgodny (zamiast domyślnie ustawionego High Efficiency).

iPhone nie pyta się użytkownika (np. podczas pierwszego uruchomienia aparatu albo konfiguracji telefonu) jaki format preferuje on używać, więc trzeba samemu o tym pamiętać.

mowa końcowa

Temat ogólnie mnie rozzłościł. Nawet jeśli pliki HEIC pozwalają na mniejsze (a czasem znacznie mniejsze) pliki przy zachowaniu dobrej jakości, nie jest to moim zdaniem warte późniejszych frustracji, bo "jakiś program nie może otworzyć pliku". I mimo że ostatecznie znalazłem kilka dobrych rozwiązań tego problemu, to wciąż - domyślne ustawienia nie pozwalają na bezproblemowe korzystanie ze zdjęć. A osoba nietechniczna i nieznająca pojęcia "HEIC" może nawet nie wiedzieć gdzie dokładnie leży problem.

Dla mnie to dobry grunt do alternatywnej wersji green bubble shamingu (heic shaming?).

HEICe - problemy z otwarciem i jakie rozwiązania znalazłem