PicScrub logoPicScrub
Formatlara dön

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ı

Header
LSD
GCT
Extensions
Image Data
Trailer
Header
6 bayt
GIF87a ya da GIF89a
LSD
7 bayt
Mantıksal ekran tanımlayıcısı
GCT
768 bayt
Genel renk tablosu (isteğe bağlı)
Extensions
100 bayt
Uzantı blokları (meta veri)
Image Data
Değişken uzunluk
Görsel tanımlayıcısı + LZW verisi
Trailer
1 bayt
0x3B sonlandırıcısı

GIF başlığı

GIF imzası
Sürüm (89a)
Genişlik (640)
Yükseklik (480)
Paketlenmiş alanlar
Arka plan indeksi
Piksel en boy oranı
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

Sürüm farkları

GIF87a

Orijinal standart. Uzantı bloğu yok.

GIF89a

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.

21 F9 04 [disposal] [delay] [transparent] 00

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.

21 FE [size] [comment data...] 00

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.

21 FF 0B [app identifier] [auth code] [data...] 00

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.

Uzantı girişi
Blok boyutu (11)
NETSCAPE2.0
Alt blok boyutu
Alt blok kimliği
Döngü sayısı
Sonlandırıcı
OffsetHexASCII
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

1

Başlığı doğrula

GIF87a ya da GIF89a imzasını kontrol et

2

Başlık verisini kopyala

LSD ve genel renk tablosunu olduğu gibi koru

3

Uzantıları ayıkla

NETSCAPE2.0 ve grafik kontrol bloklarını tut, yorum ve XMP bloklarını sil

4

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

5

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