6.1.5. Учебный пример: SNG

6.1.5. Учебный пример: SNG

Программа sng осуществляет преобразование формата PNG в его полнотекстовое представление (формат SNG или Scriptable Network Graphics) и обратно. Формат SNG можно просматривать и модифицировать с помощью обычного текстового редактора. Работающая с PNG-файлом программа создает SNG-файл, а при запуске для SNG-файла она восстанавливает эквивалентный PNG-файл. Преобразование осуществляется исключительно точно, без потерь и в обоих направлениях.

Стиль синтаксиса SNG подобен CSS (Cascading Style Sheets — каскадные таблицы стилей), другому языку для управления представлением графики, что делает, как минимум, шаг в сторону правила наименьшей неожиданности. Ниже приводится тестовый пример.

Пример 6.2. SNG-файл

#SNG: This is a synthetic SNG test file

#(Искусственный тестовый SNG-файл)

# Our first test is a paletted (type 3) image.

#(Первый тест - индексированное (тип 3) изображение.)

IHDR: {

 width: 16;

 height: 19;

 bitdepth: 8;

 using color: palette;

 with interlace;

}

#

# Sample bit depth chunk (Блок глубины цвета)

sBIT: {

 red: 8;

 green: 8;

 blue: 8;

}

# An example palette: three colors, one of which

# we will render transparent

#(пример палитры: три цвета, один из #которых выводится прозрачным)

PLTE: {

 (0, 0, 255)

 (255, 0, 0)

 "dark slate gray",

}

# Suggested palette (Рекомендованная палитра)

sPLT {

 name: "A random suggested palette";

 depth: 8;

 (0, 0, 255), 255, 7;

 (255, 0, 0), 255, 5;

 ( 70, 70, 70), 255, 3;

}

# The viewer will actually use this

#(программа просмотра фактически

#использует такие данные)...

IMAGE: {

 pixels base64

2222222222222222

2222222222222222

0000001111100000

0000011111110000

0000111001111000

0001110000111100

0001110000111100

0000110001111000

0000000011110000

0000000111100000

0000001111000000

0000001111000000

0000000000000000

0000000110000000

0000001111000000

0000001111000000

0000000110000000

2222222222222222

2222222222222222

}

tEXt: {

 # Ordinary text chunk (Обычный текстовый блок)

 keyword: "Title";

 text: "Sample SNG script";

}

# Test file ends here

#(Окончание тестового файла)

Цель данного инструментального средства — позволить пользователю редактировать различные непонятные типы PNG-блоков, которые вовсе не обязательно поддерживаются традиционными графическими редакторами. Вместо написания специализированного кода для анализа двоичного PNG-формата, пользователь может просто преобразовать изображение в полнотекстовое представление, отредактировать его, а затем переконвертировать его обратно. Другая потенциальная прикладная задача заключается в том, чтобы сделать изображение открытым для систем контроля версий. В большинстве систем контроля версий текстовыми файлами гораздо проще управлять, чем большими двоичными блоками, а diff-операции над SNG-файлами фактически имеют некоторые возможности для извлечения полезных сведений.

Однако выигрыш в данном случае связан не только со временем, не потраченным на написание специализированного кода для манипуляций с двоичными PNG-файлами. Код программы sng не является очень прозрачным, однако он поддерживает прозрачность в более крупных системах программ, делая все содержимое PNG-файлов воспринимаемым.

Данный текст является ознакомительным фрагментом.