PicScrub logoPicScrub
Formatlara dön

PNG formatı

Portable Network Graphics

Chunk tabanlı yapı

PNG, ortalıktaki en derli toplu dosya formatlarından biri. Her şey "chunk" denen, kendi türü, verisi ve sağlama toplamı olan bağımsız bloklar hâlinde düzenlenir. İşin zarif tarafı, çözücülerin anlamadıkları chunk'ları atlayabilmesi. PNG'nin eski yazılımları bozmadan meta veri desteklemesi de bu sayede oluyor.

Asıl akıllıca kısım chunk adlandırmasında: ilk harf büyükse chunk "kritiktir", yani o olmadan görsel görüntülenmez. Küçük harf ise "yardımcı" demektir, olsa iyi olur ama şart değil. Bizi ilgilendiren meta veri chunk'larının hepsi yardımcı, onları gönül rahatlığıyla silebilmemizin sebebi de bu.

PNG dosya yapısı

Signature
IHDR
Metadata
IDAT
IEND
Signature
8 bayt
89 50 4E 47 0D 0A 1A 0A
IHDR
25 bayt
Görsel başlığı (zorunlu)
Metadata
100 bayt
tEXt, iTXt, eXIf chunk'ları
IDAT
Değişken uzunluk
Sıkıştırılmış görsel verisi
IEND
12 bayt
Görsel sonu işaretleyicisi

PNG imzası ve IHDR

PNG imzası
IHDR uzunluğu (13)
IHDR türü
Genişlik (256)
Yükseklik (256)
Bit derinliği, renk türü vb.
OffsetHexASCII
0000
89504E470D0A1A0A0000000D49484452
.PNG........IHDR
0010
00000100000001000802000000000000
.............

Chunk yapısı

UzunlukTürVeriCRC32
4 bayt4 baytDeğişken4 bayt

Chunk adlandırma kuralı

  • • İlk harf büyük = Kritik chunk (mutlaka anlaşılması gerekir)
  • • İlk harf küçük = Yardımcı chunk (isteğe bağlı, yok sayılabilir)
  • • İkinci harf = Herkese açık (büyük harf) ya da özel (küçük harf)

Kritik chunk'lar

Görselin geçerli sayılması için bu chunk'ların dosyada bulunması ve anlaşılması gerekir. PicScrub kritik chunk'ları her zaman korur.

IHDR:Görsel başlığı

İmzadan sonraki ilk chunk. Genişlik, yükseklik, bit derinliği, renk türü, sıkıştırma yöntemi, filtre yöntemi ve interlace yöntemini içerir. Tam olarak 13 baytlık veri taşır.

IDAT:Görsel verisi

Sıkıştırılmış (zlib/deflate) görsel verisini içerir. Birden fazla IDAT chunk'ına bölünmüş olabilir. Bütün IDAT chunk'ları art arda gelmelidir.

IEND:Görsel sonu

PNG veri akışının sonunu işaretler. Dosyadaki son chunk olmak zorundadır. Hiç veri baytı taşımaz.

PLTE:Palet

İndeksli renk kullanan görseller (renk türü 3) için zorunludur. 1–256 arası RGB palet girdisi içerir.

Meta veri chunk'ları

Gizlilik açısından hassas meta veriler barındırabilen yardımcı chunk'lar. PicScrub'ın sildiği chunk'lar bunlar.

tEXt:Sıkıştırılmamış metin

Latin-1 kodlamasında anahtar-değer çiftleri. Sık görülen anahtarlar: Author, Description, Copyright, Creation Time, Software.

Biçim: anahtar + null + metin

zTXt:Sıkıştırılmış metin

tEXt ile aynı, tek farkı zlib ile sıkıştırılmış olması. Daha uzun metinler için kullanılır.

iTXt:Uluslararası metin

İsteğe bağlı sıkıştırmalı UTF-8 metin. Dil etiketlerini ve çevrilmiş anahtarları destekler. XMP meta verileri için kullanılır.

XMP anahtarı: XML:com.adobe.xmp\0

eXIf:EXIF verisi

2017'de PNG uzantısı olarak kayda geçti. TIFF biçiminde ham EXIF verisi içerir, yapısı JPEG EXIF ile aynıdır. GPS, tarih ve saat, cihaz bilgisi barındırabilir.

iCCP:ICC renk profili

Gömülü ICC renk profili. zlib ile sıkıştırılır. PicScrub renkler bozulmasın diye bunu varsayılan olarak korur.

tIME:Son değişiklik zamanı

Yedi bayt: yıl (2), ay, gün, saat, dakika, saniye. Görselin en son ne zaman değiştirildiğini ele verir.

Renkle ilgili chunk'lar

Bu chunk'lar renklerin nasıl görüntüleneceğini etkiler ama genellikle kişisel bilgi içermez. PicScrub bunları varsayılan olarak korur.

sRGB

sRGB renk uzayını belirtir. İşleme amacı için tek bayt.

gAMA

4 baytlık işaretsiz tamsayı olarak gama değeri (100.000 ile ölçeklenmiş).

cHRM

Ana renklerin kromatiklik değerleri ve beyaz nokta koordinatları.

sBIT

Her kanal için orijinal örnek bit derinlikleri.

CRC32 doğrulaması

Her PNG chunk'ı, chunk türü ve verisi üzerinden hesaplanan bir CRC32 sağlama toplamı içerir. Bu, verinin bozulmadığını garanti eder.

CRC hesabı

CRC32 input = chunk_type (4 bytes) + chunk_data (N bytes)
CRC32 output = 4 bytes appended after chunk data

// PNG şu CRC-32 polinomunu kullanır: 0xEDB88320

PicScrub neden CRC doğruluyor

PNG dosyalarını okurken PicScrub, verinin bozulmadığından emin olmak için her chunk'ın CRC değerini doğrular. Bozuk chunk'lar sorun çıkarmadan ele alınır.

PicScrub PNG dosyalarını nasıl işliyor

1

İmzayı doğrula

PNG imzasını kontrol et: 89 50 4E 47 0D 0A 1A 0A

2

Chunk'ları çözümle

Her chunk'ın uzunluğunu ve türünü oku, CRC değerini doğrula

3

Meta veri chunk'larını ayıkla

tEXt, zTXt, iTXt, eXIf ve tIME chunk'larını tespit et ve atla

4

Dosyayı yeniden kur

İmza + ayıklanmış chunk'lar + IEND yaz

Korunan chunk'lar

  • • IHDR, PLTE, IDAT, IEND (kritik)
  • • sRGB, gAMA, cHRM (renk)
  • • iCCP (renk profili, isteğe bağlı)
  • • pHYs (piksel boyutları)
  • • tRNS (şeffaflık)

Silinen chunk'lar

  • • tEXt (metin meta verisi)
  • • zTXt (sıkıştırılmış metin)
  • • iTXt (uluslararası metin, XMP)
  • • eXIf (EXIF verisi)
  • • tIME (değişiklik zamanı)