emptygif
Dil: Türkçe

En küçük şeffaf GIF 43 bayttır.

Dosyanın tamamı bu. Ne işe yaradığını görmek için herhangi bir bayta tıklayın; sonra dosyayı kopyalayın, indirin, doğrudan bağlantı verin ya da kendi kodunuzdan sunun.

43 baytlık GIF, büyütülmüş hâli: tek bir şeffaf piksel
0000
0010
0020
1×1.gif indir

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

Her bayt ne yapar

Bir GIF, bloklardan oluşan bir dizidir. Bu dosyada yedi blok var ve bu sayfadaki her renk bunlardan birine ait. Okumak için bir bayt ya da blok seçin. Sayılar little-endian olarak saklanır: düşük bayt önce gelir, yani 01 00 1 demektir.

BaytlarAlanAnlamı
Başlık Çözücüye bunun bir GIF olduğunu ve formatın hangi sürümünü beklemesi gerektiğini söyler.
47 49 46İmzaASCII harfleri “GIF”. Her GIF dosyası bunlarla başlar.
38 39 61Sürüm“89a”. Şeffaflık için 89a gerekir; 87a'da grafik kontrol uzantısı yoktur.
Mantıksal ekran tanımlayıcısı Tuvalin boyutu ve renk tablosunun nasıl ayarlandığı.
01 00Tuval genişliği1 px.
01 00Tuval yüksekliği1 px.
80Paketlenmiş bayraklarTek bir bayta sıkıştırılmış dört ayar. En üst bit, ardından global renk tablosu geldiğini belirtir; son üç bit tablonun boyutunu verir.
00Arka plan renk indeksiPaletin 0 numaralı girdisi. Tarayıcılar bunu yok sayar ve görüntünün arkasında ne varsa onu gösterir.
00Piksel en-boy oranı0, düzeltme yapılmayan kare pikseller anlamına gelir.
Global renk tablosu Palet. Pikseller renk yerine bu listedeki bir indeksi saklar.
FF FF FFPalet girdisiKırmızı, yeşil ve mavi, her biri bir bayt: #ffffff. Bir GIF'in sahip olabileceği en küçük tablo iki girdiliktir.
00 00 00Palet girdisiKırmızı, yeşil ve mavi, her biri bir bayt: #000000. Bir GIF'in sahip olabileceği en küçük tablo iki girdiliktir.
Grafik kontrol uzantısı GIF89a ile eklenen isteğe bağlı blok. Burada paletin 0 numaralı girdisini şeffaf yapar.
21Uzantı başlatıcısı0x21 (“!”) bir uzantı bloğunun başladığını bildirir.
F9Grafik kontrol etiketi0xF9, bu uzantının bir grafik kontrol uzantısı olduğunu belirtir.
04Blok boyutuArdından 4 bayt ayar gelir.
01Paketlenmiş bayraklarEn düşük bit şeffaflık bayrağıdır. Açık olduğu için aşağıdaki şeffaf indeks kullanılır.
00 00GecikmeSaniyenin yüzde biri cinsinden 0. Yalnızca animasyonlarda önemlidir.
00Şeffaf renk indeksiPaletin 0 numaralı girdisi tamamen şeffaf çizilir.
00Blok sonlandırıcıBloğu kapatan, sıfır uzunlukta bir alt blok.
Görüntü tanımlayıcısı Görüntünün tuvaldeki konumu ve boyutu.
2CGörüntü ayırıcı0x2C (“,”) bir görüntüyü başlatır.
00 00SolGörüntü, tuvalin sol kenarından 0 px uzakta başlar.
00 00ÜstGörüntü, tuvalin üst kenarından 0 px uzakta başlar.
01 00Görüntü genişliği1 px.
01 00Görüntü yüksekliği1 px.
00Paketlenmiş bayraklarYerel renk tablosu yok, interlace yok. Görüntü global paleti kullanır.
Görüntü verisi LZW ile sıkıştırılmış ve en fazla 255 baytlık alt bloklara bölünmüş pikseller.
02LZW minimum kod boyutu2, yani sıkıştırılmış kodlar 3 bit genişliğinde başlar.
02Alt blok boyutuArdından 2 bayt sıkıştırılmış veri gelir.
44 01Sıkıştırılmış piksellerEn düşük bitten başlayarak paketlenmiş LZW kodları. Nasıl çözüldüklerini aşağıda görebilirsiniz.
00Blok sonlandırıcıBloğu kapatan, sıfır uzunlukta bir alt blok.
Sonlandırıcı Dosyanın sonunu işaretleyen tek bir bayt.
3BSonlandırıcı0x3B (“;”) dosyayı bitirir.

Paketlenmiş baytların içi

Üç baytın her biri birkaç küçük ayarı saklar. Bit 7 en soldakidir.

Mantıksal ekran tanımlayıcısı 0x80
1Global renk tablosu var
000Renk çözünürlüğü
0Palet önem sırasına göre sıralı
000Tablo boyutu: 2^(n+1) girdi
Grafik kontrol uzantısı 0x01
000Ayrılmış
000Atma yöntemi (disposal)
0Kullanıcı girdisini bekle
1Şeffaflık açık
Görüntü tanımlayıcısı 0x00
0Yerel renk tablosu var
0Geçmeli (interlace)
0Palet önem sırasına göre sıralı
00Ayrılmış
000Yerel tablo boyutu

İki bayt bir pikseli nasıl taşır

Minimum kod boyutu 2 olduğunda çözücü 3 bitlik kodlar okur. Kod 4 tabloyu temizler, kod 5 görüntüyü bitirir, 0-3 arasındaki kodlar ise palet girdileridir. 44 01 baytları en düşük bitten yukarı doğru okunur:

0x44 010001000x01 00000001

  1. 001100 = 4Temizle: yeni bir tabloyla başla
  2. 000000 = 0Piksel: paletin 0 numaralı girdisi
  3. 101101 = 5Görüntü sonu
  4. 0000000 Kullanılmayan dolgu bitleri

Daha büyük görüntüler de aynı hileyi kullanır: her yeni kod bir öncekinden bir piksel daha uzun bir diziyi temsil eder, bu yüzden 1000×1000 şeffaf bir GIF yalnızca 1.743 bayt tutar.

Daha küçük olabilir mi?

Evet, çözücülerin eksikliğini tolere ettiği kısımları atarsanız. Her varyantı üç tarayıcı motoruna ve Pillow'a verdik ve ne çizdiklerini kaydettik.

BoyutVaryantChromiumFirefoxWebKitPillow
43Bu sayfadaki standart dosya.ŞeffafŞeffafŞeffafŞeffaf
42Sonlandırıcı bayt yok. Çözücüler zaten verinin sonunda durur.ŞeffafŞeffafŞeffafŞeffaf
37Hiç palet yok. Yine de geçerli: spesifikasyon çözücülerin kendi paletlerini kullanmasına izin verir ve indeks 0 zaten şeffaftır.ŞeffafŞeffafŞeffafŞeffaf
36Palet yok, sonlandırıcı yok.ŞeffafŞeffafŞeffafŞeffaf
35Şeffaflık bloğu yok: piksel, paletin 0 numaralı rengiyle, yani beyazla çizilir.BeyazBeyazBeyazBeyaz
351987 formatı. Bir rengi şeffaf olarak işaretlemenin hiçbir yolu yoktur.BeyazBeyazBeyazBeyaz
34Şeffaflık bloğu var ama sıkıştırılmış piksel yok.ŞeffafŞeffafŞeffafHata
33Aynısı, sonlandırıcı olmadan.ŞeffafŞeffafŞeffafHata
29Palet yok, şeffaflık yok. Her motor kendi rengini seçer.SiyahBeyazŞeffafSiyah
26Hiç sıkıştırılmış verisi olmayan bir görüntü.ŞeffafŞeffafŞeffafHata
14Yalnızca başlık, tuval boyutu ve sonlandırıcı. İçinde görüntü yok.ŞeffafHataŞeffafHata

Her yerde çalışması gerekiyorsa 43 baytı kullanın. 37 bayt hâlâ geçerli bir GIF'tir ve test ettiğimiz her motorda şeffaftı. Bunun altında çözücünün hoşgörüsüne bağlı kalırsınız; 29 baytlık dosya motorların nasıl farklı davrandığını gösteriyor.

23 Eylül 2026 tarihinde Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0 ile kontrol edildi.

İstediğiniz boyutta oluşturun

Şeffaf ya da düz renk, 1×1'den 65535×65535'e kadar. Tarayıcınızda üretilir; hiçbir şey yüklenmez.

Dolgu
Yaygın boyutlar

1×1 · 43 bayt

GIF indir

Kendi stack'inizden sunun

Çalıştırmaya hazır 173 kod örneği. Kendinizinkini seçin: her biri seçtiğiniz yolda image/gif yanıtı döner. Yukarıda boyutu veya rengi değiştirdiyseniz örnekler o GIF'i kullanır.

Elixir, Erlang & Gleam

Express JavaScript

Kurulum
npm i express
Dosya
server.mjs
Çalıştır
node server.mjs
import express from 'express';

const GIF = Buffer.from('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', 'base64');

const app = express();

app.get('/pixel.gif', (req, res) => {
  res.set('Cache-Control', 'no-store');
  res.type('gif').send(GIF);
});

app.listen(8080);

Bu örneği çalıştırıp döndürdüğü baytları karşılaştırdık. Sayfayı aç

Ne için kullanılır

  • İzleme pikselleri ve beacon'lar: sunucu isteği loglar ve en küçük geçerli görüntüyle yanıt verir.
  • Lazy-load edilen görseller için yer tutucular; böylece gerçek kaynak gelmeden önce de img etiketi geçerli olur.
  • CSS desteğinin tutarsız olduğu HTML e-postalarda sabit boyutlu boşluklar.
  • Bir görsel dosyası taşımadan gerçek bir görüntüye ihtiyaç duyan testler ve mock'lar.

İzleme pikselleri göründükleri kadar güvenilir değildir

Mail Privacy Protection açıkken Apple Mail uzak görselleri bir proxy üzerinden önceden yükler; bu yüzden bir “açılma” hiç bir insana ait olmayabilir. Gmail de görselleri kendi proxy'si üzerinden çeker ve önbelleğe alır. Birçok istemci uzak görselleri varsayılan olarak engeller. Sayfa analitiği için navigator.sendBeacon() ya da 204 No Content yanıtı çoğu zaman bir görüntüden daha uygundur.

Sorular

Bir pikseli varken neden boş deniyor?
Bir GIF'in en az bir pikseli olmalıdır. Bu dosya 1×1'dir ve tek rengi şeffaf olarak işaretlenmiştir, bu yüzden hiçbir şey görünmez.
43 baytlık dosya geçerli mi?
Evet. GIF89a spesifikasyonuna tam olarak uyar ve yukarıdaki tablodaki her motor onu şeffaf çizer.
Neden PNG ya da WebP değil de GIF?
En küçük şeffaf PNG'den bile küçüktür ve son 35 yılın her tarayıcısı, e-posta istemcisi ve görüntü kütüphanesi onu okuyabilir.
data URI mı kullanmalıyım, dosya mı?
data URI bir isteği ortadan kaldırır; yer tutucular ve CSS için uygundur. İzleme piksellerinde olduğu gibi asıl amaç isteğin kendisiyse bir dosya ya da endpoint gerekir.
Hangi Content-Type'ı göndermeliyim?
image/gif. Her isteğin sunucunuza ulaşması gerekiyorsa Cache-Control: no-store ekleyin.