설명
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컬럼은 픽셀 좌표를 나타냅니다. 이미지 범위를 벗어나는 좌표를 가진 레코드는 별도 알림 없이 무시됩니다. 동일한 좌표를 가진 레코드가 여러 개 있으면 마지막 레코드가 적용됩니다(painter’s algorithm).
사용 예시
암시적 좌표 (픽셀당 1행), RGB
명시적 좌표, 그레이스케일
애니메이션
t 컬럼이 있으면 이 포맷은 정지 이미지 대신 애니메이션 PNG(APNG)를 생성합니다.
레코드는 프레임의 상대적 시간 오프셋을 나타내는 t 값에 따라 프레임으로 그룹화됩니다.
각 프레임은 독립적인 이미지입니다. 각 프레임이 시작될 때 캔버스는 비어 있으며,
암시적 좌표 모드에서는 커서가 왼쪽 상단 모서리에서 다시 시작됩니다. t 컬럼은
두 좌표 모드 모두와 함께 사용할 수 있습니다.
t의 단위는 다음 설정으로 지정됩니다.
output_format_image_time_multiplier_seconds
및
output_format_image_time_divisor_seconds:
t의 1단위는 output_format_image_time_multiplier_seconds / output_format_image_time_divisor_seconds
초입니다. 기본값(1 및 60)을 사용하면 t의 1단위는 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를 사용하면, 대신 인라인 이미지 프로토콜을 통해 이미지를 터미널에 직접 렌더링합니다: