GIF formatı
Graphics Interchange Format
Blok yapısı
GIF, kendisine biçilen ömrü onlarca yıl aşmış formatlardan biri. 1987'de CompuServe tarafından yaratıldı ve büyük ölçüde animasyon desteği sayesinde bugün hâlâ her yerde karşımıza çıkıyor.
Format, modern formatlarla kıyaslandığında insanı rahatlatacak kadar düz, blok tabanlı bir yapı kullanıyor. Bir başlık, birkaç tanımlayıcı, bir renk tablosu, görsel verin ve "bitti" demek için tek baytlık bir kapanış.
GIF dosya yapısı
GIF başlığı
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
Sürüm farkları
Orijinal standart. Uzantı bloğu yok.
Uzantıları, animasyonu ve şeffaflığı ekledi.
Uzantı blokları
GIF89a (1989 revizyonu) uzantı bloklarını getirdi, GIF'in animasyon desteği de böyle ortaya çıktı. Bütün uzantı blokları 0x21 ile başlar, ardından bir tür baytı gelir. Bu da dosyayı tararken onları kolayca ayırt etmeni sağlar. Bunların bazılarını tutmak istiyoruz (animasyon zamanlaması), bazılarını silmek (yorumlar).
Grafik kontrol uzantısı (0xF9)
Animasyon zamanlamasını, şeffaflığı ve elden çıkarma yöntemini belirler. Animasyonlu GIF dosyalarında her görsel tanımlayıcısından önce gelir. Her zaman korunur.
Yorum uzantısı (0xFE)
Düz metin yorumlar. Yazar, oluşturma tarihi, yazılım ya da kişisel notlar dahil her türlü bilgiyi taşıyabilir. PicScrub tarafından silinir.
Uygulama uzantısı (0xFF)
Uygulamaya özel veriler. En önemlisi, animasyon döngüsünü ayarlayan NETSCAPE2.0. Ayrıca XMP meta verisi de içerebilir.
Düz metin uzantısı (0x01)
Nadiren kullanılır. Metni GIF renk tablosunu kullanarak çizer. Modern yazılımların çoğu bunu yok sayar.
Uygulama uzantıları
NETSCAPE2.0:Animasyon döngüsü
Animasyonlu bir GIF dosyasının kaç kez döneceğini belirler. 0 değeri sonsuz döngü demektir.
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
PicScrub, animasyon davranışı bozulmasın diye NETSCAPE2.0 bloğunu korur.
XMP Data:Extensible Metadata Platform
Uygulama tanımlayıcısı: XMP DataXMP. XML biçiminde eksiksiz XMP/RDF meta verisi içerir.
PicScrub, XMP uygulama uzantılarını siler.
Animasyonun korunması
GIF'te işin zor tarafı, animasyon verisiyle (tutmamız gereken) meta veriyi (silmek istediğimiz) birbirinden ayırmak. İkisi de uzantı bloklarında duruyor, yani bütün uzantıları silip geçmek mümkün değil.
Animasyon için korunanlar
- • NETSCAPE2.0 döngü sayısı
- • Grafik kontrol uzantıları
- • Kare gecikmeleri
- • Elden çıkarma yöntemleri
- • Şeffaflık indeksleri
- • Yerel renk tabloları
Silinenler
- • Yorum uzantıları
- • XMP uygulama blokları
- • Bilinmeyen uygulama blokları
- • Düz metin uzantıları
PicScrub GIF dosyalarını nasıl işliyor
Başlığı doğrula
GIF87a ya da GIF89a imzasını kontrol et
Başlık verisini kopyala
LSD ve genel renk tablosunu olduğu gibi koru
Uzantıları ayıkla
NETSCAPE2.0 ve grafik kontrol bloklarını tut, yorum ve XMP bloklarını sil
Görsel verisini koru
Bütün görsel tanımlayıcılarını, yerel renk tablolarını ve LZW verisini olduğu gibi kopyala
Kapanışı yaz
Dosyayı 0x3B kapanış baytıyla bitir
LZW sıkıştırması
GIF'in görsel verisi hakkında küçük bir not: LZW sıkıştırması kullanır ve bu yöntem 2004'e kadar patentliydi (90'larda türlü türlü tartışmaya yol açmıştı). PicScrub sıkıştırılmış veriye hiç dokunmuyor. Onu bayt bayt kopyalıyoruz, yani sıfır kalite kaybı.
Bu neden önemli
Orijinal LZW verisini koruyarak PicScrub şunları garanti eder:
- • Kalite kaybı yok (görsel bit düzeyinde korunur)
- • Hızlı işleme (çözme/kodlama döngüsü yok)
- • Görsel verisi için birebir aynı dosya boyutu
GIF meta verisinin sınırları
GIF'le ilgili iyi haber şu: EXIF standardından daha eski olduğu için endişelenmen gereken GPS koordinatları ya da kamera bilgisi yok. Buradaki meta veri dertleri çok daha sıradan.
Neler sızabilir
GIF'in gizlilik sorunları JPEG'e kıyasla oldukça küçük:
- • Yorum uzantıları (bazen yazarın notlarını içerir)
- • XMP meta verisi (nadir ama mümkün)
- • Uygulama bloklarındaki yazılım bilgisi