Sari la conținut

Portable Network Graphics

De la Wikipedia, enciclopedia liberă
Portable Network Graphics
Tip MIMEimage/png
Ultima versiune3.0
Websitehttp://www.libpng.org/pub/png/, http://png-mng.sourceforge.net/pub/png/

Fișierul PNG (Portable Network Graphics) se folosește pentru a stoca o imagine, având extensia .png.[1][2] Este versiunea mai tânără a GIF-ului.[3][4] Pentru comprimarea imaginii nu folosește algoritmul LZW (ca formatul GIF), deoarece unul din motivele dezvoltării formatului PNG a fost evitarea algoritmului LZW, acesta bazându-se pe algoritmul LZ77.[3][4][5]

Compresia PNG este fără pierderi, iar formatul acceptă imagini în tonuri de gri, cu culori indexate sau în culori reale, precum și transparență variabilă printr-un canal alfa. Față de GIF, oferă adâncimi de culoare mult mai mari și, de regulă, fișiere mai mici pentru același conținut cu 256 de culori, dar nu acceptă animație în formatul de bază; față de JPEG, care folosește compresie cu pierderi, comprimă mai bine imaginile cu text și desene liniare, dar produce fișiere mai mari pentru fotografii.[1][6]

Formatul a apărut ca reacție la anunțul din 28 decembrie 1994 potrivit căruia implementările formatului GIF urmau să fie supuse plății unor redevențe către Unisys, deținătoarea brevetului algoritmului LZW. La 4 ianuarie 1995, Thomas Boutell a deschis pe grupul Usenet „comp.graphics” o discuție despre o alternativă liberă la GIF; numele a fost propus ca acronim recursiv pentru PNG is not GIF.[4] Specificația completă a fost publicată de World Wide Web Consortium (W3C) la 1 octombrie 1996 și republicată ca RFC 2083 în ianuarie 1997,[3][4] iar în 2004 a devenit standard internațional, ISO/IEC 15948. A treia ediție, care adaugă animația, gama dinamică înaltă (HDR) și metadatele Exif, a devenit recomandare W3C la 24 iunie 2025.[1]

Structura fișierului

[modificare | modificare sursă]

Un fișier PNG începe cu o semnătură de opt octeți (89 50 4E 47 0D 0A 1A 0A), care permite detectarea erorilor de transmisie. Urmează o succesiune de blocuri (chunks), fiecare cuprinzând lungimea, tipul, datele propriu-zise și o sumă de control CRC. Blocurile esențiale sunt IHDR (antetul, cu dimensiunile, adâncimea de biți și tipul de culoare), PLTE (paleta), IDAT (datele comprimate) și IEND (marcajul de sfârșit); blocurile auxiliare, care pot conține gama, profiluri de culoare ICC, text sau informații de transparență, pot fi ignorate de programele care nu le recunosc.[1]

Formatul definește cinci tipuri de culoare — tonuri de gri, RGB, culori indexate, tonuri de gri cu canal alfa și RGB cu canal alfa —, cu adâncimi de 1, 2, 4, 8 sau 16 biți pe canal, ceea ce permite până la 48 de biți pe pixel în culori reale, respectiv 64 de biți cu canal alfa. Transparența poate fi obținută printr-o valoare de pixel declarată transparentă, prin valori alfa atașate intrărilor din paletă sau printr-un canal alfa complet, care oferă până la 254 de niveluri de transparență parțială.[1][6]

Comprimarea are două etape. Mai întâi, fiecare linie a imaginii este transformată printr-un filtru de predicție, ales dintre cinci tipuri (None, Sub, Up, Average și Paeth), care estimează valoarea fiecărui octet pe baza octeților vecini și memorează doar diferența față de valoarea prezisă. Datele filtrate sunt apoi comprimate cu algoritmul DEFLATE, o combinație între LZ77 și codificarea Huffman. Opțional, imaginea poate fi stocată întrețesut (schema Adam7, în șapte treceri), ceea ce permite afișarea progresivă a unei versiuni de rezoluție redusă înainte de transferul complet, dar reduce eficiența compresiei.[1][3]

Formatul PNG de bază nu acceptă animația. Extensia MNG (Multiple-image Network Graphics), publicată în 2001, este mult mai complexă și are o semnătură incompatibilă cu decodoarele PNG obișnuite, astfel că nu a fost adoptată pe scară largă.[7] Formatul APNG (Animated PNG), propus în 2008 de dezvoltatori de la Mozilla, este mai simplu și compatibil retroactiv — decodoarele care nu îl recunosc afișează doar prima imagine — și a fost inclus oficial în a treia ediție a specificației.[1]

Fiind un format fără pierderi, PNG permite conversia către alte formate fără pierderi și resalvarea repetată fără ca datele imaginii să se modifice.[1] Conversia către formate cu pierderi, cum este JPEG, modifică însă ireversibil imaginea: apar artefacte de compresie, iar canalul alfa se pierde, întrucât JPEG nu acceptă transparență, zonele transparente fiind de obicei înlocuite cu o culoare de fundal.[6] Reconvertirea ulterioară în PNG nu reface calitatea inițială.

Conversia unei imagini în culori reale către GIF sau către un PNG cu culori indexate presupune reducerea paletei la cel mult 256 de culori, ceea ce poate produce efecte de posterizare;[6] aceeași cuantizare este uneori aplicată intenționat, sub numele de „compresie PNG cu pierderi”, pentru a micșora fișierul păstrând structura formatului.[8][9] Deoarece PNG este un format raster, transformarea sa într-un format vectorial precum SVG nu este directă, ci necesită vectorizare (trasare automată), operație care aproximează contururile imaginii.[10]

  1. 1 2 3 4 5 6 7 8 „PNG Specification (Third Edition)”. World Wide Web Consortium. . Accesat în .
  2. „Media Type image/png”. Internet Assigned Numbers Authority. . Accesat în .
  3. 1 2 3 4 „RFC 2083: PNG Specification Version 1.0” (txt). Internet Engineering Task Force. martie 1997. Accesat în .
  4. 1 2 3 4 Roelofs, Greg (aprilie 1997). „History of the PNG Format”. libpng.org. Accesat în .
  5. Deutsch, Peter (mai 1996). „RFC 1951: DEFLATE Compressed Data Format Specification version 1.3” (txt). IETF. Accesat în .
  6. 1 2 3 4 „A Basic Introduction to PNG Features”. libpng.org. Accesat în .
  7. „MNG (Multiple-image Network Graphics) Home Page”. libpng.org. Accesat în .
  8. „PNG can be a lossy format”. pngmini.com. Accesat în .
  9. „Conversia imaginilor PNG în alte formate”. PDFGuru. Accesat în .
  10. Selinger, Peter. „Potrace: Transforming bitmaps into vector graphics”. Accesat în .