HEIC formatı
High Efficiency Image Container
ISOBMFF kapsayıcısı
Daha önce MP4 video dosyalarıyla uğraştıysan HEIC sana tanıdık gelecek. Apple, HEIC için kapsayıcı olarak ISO Base Media File Format'ı (ISOBMFF) seçti. Yani HEIC, JPEG ya da PNG gibi geleneksel görsel formatlarından çok video formatlarıyla aynı genleri taşıyor.
Format, dört karakterlik tür kodları olan iç içe "kutu"lardan (bunlara atom da deniyor) oluşuyor. Şaşırtıcı derecede zarif bir tasarım: karmaşık veri hiyerarşilerine izin veriyor ama temelini kavradıktan sonra çözümlemesi de görece kolay.
HEIC dosya yapısı
HEIC başlığı (ftyp kutusu)
| Offset | Hex | ASCII | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 000000186674797068656963 | ....ftypheic | |||||||||||
| 000C | 000000006D69663168656963 | ....mif1heic | |||||||||||
Kutu yapısı
Boyut = 1 ise türden sonra 8 baytlık genişletilmiş bir boyut gelir. Boyut = 0 ise kutu dosyanın sonuna kadar uzanır.
Önemli kutular
HEIC dosyalarındaki kutu hiyerarşisi epey derinleşebiliyor. Meta verinin tahmin edilebilir offset'lerde durduğu JPEG'in aksine HEIC, meta verisini iç içe geçmiş yapının birkaç kat altına gömüyor. Ana parçalar şöyle bir araya geliyor.
ftyp:Dosya türü
Dosyadaki ilk kutu. Ana markayı ve uyumlu markaları içerir. Formatın tanınması için zorunludur.
heic heix hevc hevx heim heis hevm hevs mif1 msf1meta:Meta veri kabı
Öğe konumları, özellikleri ve ilişkilendirmeleri dahil bütün meta verileri içerir. EXIF/XMP verileri de burada durur.
meta (meta veri kabı) ├── hdlr (işleyici referansı) ├── pitm (birincil öğe kimliği) ├── iloc (öğe konumları → mdat içindeki offset'ler) │ └── [item_id, offset, length] girdileri ├── iinf (öğe bilgisi → 'Exif' öğesini bulmak için) │ └── öğe türlerini taşıyan infe girdileri ├── iprp (öğe özellikleri) │ ├── ipco (özellik kabı) │ │ ├── hvcC (HEVC çözücü ayarları) │ │ ├── ispe (görsel boyutları) │ │ ├── colr (ICC profili, offset+12) │ │ ├── Exif (TIFF biçiminde EXIF) │ │ └── pixi (piksel bilgisi) │ └── ipma (özellik ilişkilendirmeleri) └── iref (öğe referansları)
mdat:Medya verisi
HEVC ile kodlanmış asıl görsel verisini içerir. meta içindeki iloc kutusu, mdat içindeki offset'leri verir.
HEIC dosyalarında meta veri
JPEG'in APP işaretleyicilerine alışkınsan, HEIC bambaşka bir yol izliyor. Dosyanın başında sıralanan işaretleyiciler yerine meta veri, meta kutusunun içinde "öğe özellikleri" olarak duruyor. EXIF verisinin kendisi hâlâ tanıdık TIFF biçiminde ama ona ulaşmak için önce kutu hiyerarşisinde gezinmen gerekiyor.
EXIF özelliği
ipco (öğe özellik kabı) içinde "Exif" türüyle saklanır. JPEG'dekiyle aynı, standart TIFF biçimindeki EXIF verisini içerir.
XMP özelliği
"mime" türünde bir özellik olarak, "application/rdf+xml" içerik tipiyle saklanan XML tabanlı meta veri.
ICC profili
"prof" türünde bir "colr" kutusunda saklanan renk profili.
Offset'ler neden önemli
iloc kutusu, mdat içine işaret eden hassas bayt offset'leri taşır. Herhangi bir kutunun boyutu değişirse (örneğin meta veri silindiğinde) bu offset'lerin yeniden hesaplanması gerekir, yoksa dosya okunamaz hâle gelir.
Kayıpsız anonimleştirme
HEIC'in zorlaştığı yer burası. Format, meta verilerle kolayca oynanabilsin diye değil, video ve görsellerin verimli saklanması için tasarlandı.
Zorluk nerede
HEIC'in offset tabanlı yapısı bayt silmeyi riskli hâle getiriyor. iloc kutusu, mdat içine işaret eden hassas bayt offset'leri barındırıyor. Tek bir kutuyu bile silsen o offset'ler yanlışa döner ve görsel bir daha açılmaz.
Sıfır yazma yöntemi
PicScrub, meta veri kutularını silmek yerine kutu yapısını ve boyutlarını koruyarak içeriklerinin üzerine sıfır yazar.
Sonra: [Exif][0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00...]
Neden sıfır yazma?
- • Dosya bütünlüğü korunur:Bütün offset'ler geçerli kalır
- • Yeniden sıkıştırma yok:Görsel verisine dokunulmaz
- • Meta veri yok edilir:Sıfırlar hiçbir bilgi taşımaz
- • Geri alınabilir mi?:Hayır, üzerine yazılan veri gitmiştir
PicScrub HEIC dosyalarını nasıl işliyor
Kutu yapısını çözümle
ftyp ve meta kutularını özyinelemeli olarak çözümle, bütün kutuları tespit et
Meta veriyi bul
ipco kabındaki Exif ve XMP özelliklerini bul
Meta veri içeriğini sıfırla
Meta veri kutularının içeriğinin üzerine sıfır yaz
Yapıyı koru
Kutu başlıklarını, boyutlarını ve bütün offset'leri olduğu gibi bırak
Dosya boyutu meselesi
PicScrub silmek yerine sıfır yazma yöntemini kullandığı için çıktı dosyasının boyutu girdiyle aynı olur. Meta verinin kapladığı alan korunur ama içi sıfırlarla doldurulur.
HEIC, HEIF ve AVIF
İsimlendirme kafa karıştırıcı, hemen açıklığa kavuşturalım. HEIF kapsayıcı formatın adı; HEIC ve AVIF ise o kapsayıcının içindeki görselin hangi kodekle sıkıştırıldığını anlatıyor.
| Format | Kapsayıcı | Kodek | Kimler kullanıyor |
|---|---|---|---|
| HEIC | HEIF | HEVC (H.265) | Apple cihazları |
| HEIF | HEIF | Çeşitli | Genel amaçlı kapsayıcı |
| AVIF | HEIF | AV1 | Web (telifsiz) |
Üçü de aynı ISOBMFF/HEIF kapsayıcı yapısını kullanıyor, yani PicScrub'ın yöntemi hepsinde işe yarıyor.