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
Przykład z pliku
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 };
}