Skip to main content

Descripción

Representa el resultado de una consulta como una imagen PNG. Resulta útil como herramienta de visualización integrada. El tamaño de la imagen de salida viene determinado por los ajustes output_format_image_width y output_format_image_height (ambos con un valor predeterminado de 1024). Los píxeles no cubiertos por el resultado se rellenan de negro (en los modos RGB y escala de grises) o de negro transparente (en modo RGBA). El modo de color se determina automáticamente a partir de los nombres y tipos de las columnas del resultado: Los nombres de las columnas se comparan sin distinguir entre mayúsculas y minúsculas. Si el modo de color no puede determinarse de forma inequívoca (por ejemplo, por nombres de columna desconocidos, v mezclado con r/g/b/a, o por faltar uno de r/g/b), la consulta genera una excepción. Para los canales de píxel, los valores enteros se limitan a [0, 255] y los valores de coma flotante se limitan a [0, 1] y luego se escalan a [0, 255]. La posición de cada registro en la imagen se determina mediante uno de estos dos modos:
  • Implícito (el predeterminado — cuando no está presente ni x ni y). Cada registro corresponde a un único píxel; los píxeles se rellenan en orden de barrido: de izquierda a derecha y de arriba abajo.
  • Explícito (cuando están presentes las columnas x e y, ambas de tipo entero). Las columnas x e y indican las coordenadas del píxel. Los registros con coordenadas fuera de la imagen se ignoran silenciosamente. Si hay varios registros con las mismas coordenadas, prevalece el último (algoritmo del pintor).

Ejemplo de uso

Coordenadas implícitas (una fila por píxel), RGB

Coordenadas explícitas, escala de grises

Animación

Si el resultado tiene una columna t de tipo entero, el formato genera un PNG animado (APNG) en lugar de una imagen estática. Los registros se agrupan en fotogramas según el valor de t, que representa el desfase temporal relativo del fotograma. Cada fotograma es una imagen independiente: el lienzo está vacío al inicio de cada fotograma y, en el modo de coordenadas implícitas, el cursor vuelve a empezar desde la esquina superior izquierda. La columna t se puede combinar con cualquiera de los modos de coordenadas. La unidad de t viene dada por output_format_image_time_multiplier_seconds y output_format_image_time_divisor_seconds: una unidad de t equivale a output_format_image_time_multiplier_seconds / output_format_image_time_divisor_seconds segundos. Con los valores predeterminados (1 y 60), una unidad de t equivale a 1/60 de segundo. Un fotograma se muestra hasta que comienza el siguiente, por lo que su duración es la diferencia entre dos valores consecutivos de t. El último fotograma se muestra durante el mismo tiempo que el anterior. La animación se repite indefinidamente.

Transmisión de fotogramas

De forma predeterminada, todos los fotogramas se recopilan en memoria y se escriben al final de la consulta, lo que mantiene un búfer de imagen por cada valor distinto de t y permite que t llegue en cualquier orden. La configuración output_format_image_streaming_animation escribe cada fotograma en cuanto se detecta el siguiente valor de t. Solo se mantiene un búfer de imagen en memoria y los fotogramas llegan a la salida mientras la consulta aún se está ejecutando, por lo que un visor puede mostrarlos a medida que se generan. A cambio:
  • t debe ser no decreciente; de lo contrario, la consulta genera una excepción. Añada ORDER BY t si es necesario.
  • Se desconoce el número de fotogramas cuando debe escribirse la cabecera, por lo que el fragmento acTL declara un límite superior en lugar del recuento exacto. Los navegadores reproducen este tipo de archivo, pero los decodificadores que se basan en el recuento declarado (por ejemplo, Pillow y algunas herramientas APNG de línea de comandos) informan de un error después del último fotograma real. Una animación de un solo fotograma es la excepción: para cuando se escribe ese fotograma, se ha leído todo el resultado, por lo que el recuento se declara exactamente y la salida cumple la especificación.
Dado que un protocolo de imágenes de terminal en línea transporta todo el flujo de datos como una única carga útil, los fotogramas no pueden llegar antes al terminal y esta configuración solo afecta a la cantidad de memoria utilizada. El recuento exacto de fotogramas se corrige en la carga útil almacenada temporalmente en el búfer antes de enviarla, por lo que no se aplica la salvedad sobre el límite superior. Una animación solo se muestra en el modo de terminal iterm. El protocolo sixel no puede representar animaciones, y el protocolo de gráficos Kitty solo anima mediante un flujo independiente de comandos por fotograma, no mediante un flujo de datos animado, por lo que mostraría únicamente el primer fotograma; ambos modos rechazan un resultado con una columna t.

Mostrar imágenes en la terminal

De forma predeterminada, el formato PNG escribe los bytes sin procesar de la imagen. La configuración output_format_image_terminal_mode hace que el formato muestre la imagen directamente en la terminal mediante un protocolo de imagen en línea:

Configuración del formato

Última modificación el 14 de agosto de 2026