semmixkolor i percepcja

Komentarze ($FE)

Blok komentarza przechowuje tekst, który nie pojawia się na obrazie: informację o autorze, programie, prawach autorskich albo cokolwiek innego. To najprostsze z rozszerzeń: nie ma bloku stałego, tylko podbloki z tekstem.

Budowa

21 FE rozszerzenie, etykieta komentarza n ...n bajtów tekstu podblok (1..255 bajtów) ... kolejne podbloki, jeśli tekst jest dłuższy 00 terminator

Przykład z pliku

21 FE 09 73 65 6D 6D 69 78 2E 70 6C 00 s e m m i x . p l 09 = 9 bajtów tekstu: "semmix.pl"

Komentarz dłuższy niż 255 bajtów dzieli się na kilka podbloków. Granice podbloków nie mają znaczenia dla treści: dekoder skleja je w jeden tekst.

Kodowanie znaków

Specyfikacja przewiduje 7-bitowe ASCII. Polskie znaki w komentarzu nie mają więc określonego kodowania. Współczesne programy zapisują zwykle UTF-8 i zwykle odczytują go poprawnie, ale nie ma na to gwarancji. Bezpieczniej trzymać się ASCII albo zapisać metadane w XMP przez rozszerzenie aplikacji.

Gdzie może stać

Komentarz może się pojawić wszędzie między blokami, także między klatkami animacji. Nie może tylko rozdzielać bloku sterowania grafiką i obrazu, którego ten blok dotyczy (zob. kolejność bloków). W przykładowym pliku komentarz stoi przed blokiem $F9 i to jest poprawne.

Co komentarze mogą zdradzić

Programy graficzne potrafią wpisywać do komentarza swoją nazwę i wersję, a niektóre także nazwę użytkownika albo ścieżkę pliku. Przed publikacją grafiki warto sprawdzić, co jest w komentarzach, i w razie potrzeby je usunąć. Optymalizatory GIF zwykle robią to domyślnie, bo komentarze nie wpływają na wygląd obrazu.

// odczyt komentarza; pos wskazuje bajt 21 bloku 21 FE
function readComment(b, pos) {
  pos += 2;
  let text = '';
  for (let n = b[pos++]; n !== 0; n = b[pos++]) {
    text += new TextDecoder().decode(b.subarray(pos, pos + n));
    pos += n;
  }
  return { text, next: pos };
}