Описание
output_format_image_width и
output_format_image_height
(обе по умолчанию равны 1024). Пиксели, не покрытые результатом, заполняются чёрным цветом
(в режимах RGB и градаций серого) или прозрачным чёрным (в режиме RGBA).
Цветовой режим автоматически определяется по именам столбцов и типам результата:
Имена столбцов сопоставляются регистронезависимо. Если цветовой режим нельзя определить однозначно
(например, из-за неизвестных имён столбцов, смешения
v с r/g/b/a или отсутствия одного из r/g/b),
запрос генерирует исключение.
Для пиксельных каналов целочисленные значения ограничиваются диапазоном [0, 255], а значения с плавающей точкой —
диапазоном [0, 1], после чего масштабируются до [0, 255].
Положение каждой записи в изображении определяется одним из двух режимов:
- Неявный (по умолчанию — когда нет ни
x, ниy). Каждая запись соответствует одному пикселю; пиксели заполняются в порядке сканирования: слева направо, сверху вниз. - Явный (когда присутствуют столбцы
xиy, оба целочисленного типа). Столбцыxиyзадают координаты пикселя. Записи с координатами за пределами изображения молча игнорируются. Если несколько записей имеют одинаковые координаты, используется последняя из них (алгоритм художника).
Пример использования
Неявные координаты (одна строка на пиксель), RGB
Явные координаты, градации серого
Анимация
t целочисленного типа, формат создаёт анимированный PNG (APNG) вместо
статичного изображения. Записи группируются в кадры по значению t, которое задаёт относительное смещение времени
кадра. Каждый кадр представляет собой независимое изображение: в начале каждого кадра холст пуст, а в
режиме неявных координат курсор снова начинается с верхнего левого угла. Столбец t можно использовать с
любым режимом координат.
Единица измерения t задаётся параметрами
output_format_image_time_multiplier_seconds
и
output_format_image_time_divisor_seconds:
одна единица t равна output_format_image_time_multiplier_seconds / output_format_image_time_divisor_seconds
секунды. При значениях по умолчанию (1 и 60) одна единица t равна 1/60 секунды.
Кадр отображается до начала следующего кадра, поэтому его длительность равна разности между двумя последовательными
значениями t. Последний кадр отображается столько же, сколько и предыдущий. Анимация повторяется бесконечно.
Потоковая передача кадров
t
при этом хранится отдельный буфер изображения, а значения t могут поступать в любом порядке.
Параметр
output_format_image_streaming_animation
записывает каждый кадр, как только встречается следующее значение t. В памяти хранится только один буфер изображения, а
кадры поступают на вывод, пока запрос ещё выполняется, поэтому программа просмотра может отображать их по мере создания.
При этом:
tдолжен быть неубывающим; в противном случае запрос генерирует исключение. При необходимости добавьтеORDER BY t.- Количество кадров неизвестно на момент записи заголовка, поэтому фрагмент
acTLуказывает верхнюю границу вместо точного количества. Браузеры воспроизводят такой файл, но декодеры, доверяющие указанному количеству (например,Pillowи некоторые инструменты командной строки дляAPNG), сообщают об ошибке после последнего фактического кадра. Исключение составляет анимация из одного кадра: к моменту записи этого кадра весь результат уже прочитан, поэтому количество указывается точно, а вывод соответствует спецификации.
iterm. Протокол sixel вообще не поддерживает
анимацию, а графический протокол Kitty поддерживает анимацию только через отдельный поток покадровых команд,
а не через анимированный поток данных, поэтому отобразит лишь первый кадр; оба режима отклоняют результат со
столбцом t.
Отображение изображений в терминале
PNG выводит необработанные байты изображения. Параметр
output_format_image_terminal_mode
заставляет формат вместо этого отображать изображение прямо в терминале с помощью протокола встроенных изображений: