Сегодня я хочу рассказать Вам о расширении pg_aa, которое позволяет превращать бинарные данные PNG в ASCII-графику прямо внутри PostgreSQL.
PostgreSQL умеет хранить изображения... Но что, если вы хотите не просто хранить картинку, а показать её прямо в psql — без графического клиента, без веб-интерфейса, просто символами?
pg_aa — это расширение для работы с библиотеками ASCII-арта внутри PostgreSQL. Оно добавляет функции, которые превращают бинарные данные PNG в ASCII-графику.
Расширение предоставляет две функции:
· aa_out(bytea, int4) — рендеринг через библиотеку libaa
· caca_out(bytea, int4) — рендеринг через библиотеку libcaca
Обе принимают бинарные данные изображения в формате PNG и желаемую ширину ASCII-арта в символах. Внутри расширение конвертирует картинку в оттенки серого и передаёт в ASCII-рендерер.
Пример вызова для показа картинки из БД:
```sql
-- Создаём таблицу для хранения изображений
CREATE TABLE pictures (
id serial PRIMARY KEY,
name text,
data bytea
);
-- Загружаем PNG-файл в таблицу
INSERT INTO pictures (name, data)
VALUES ('logo', pg_read_binary_file('/tmp/logo.png'));
-- Выводим ASCII-арт через libaa (ширина 80 символов)
SELECT aa_out(data, 80) FROM pictures WHERE name = 'logo';
-- Или через libcaca (ширина 60 символов)
SELECT caca_out(data, 60) FROM pictures WHERE id = 1;
```
На выходе — многострочный текст, который отображается в терминале как ASCII-картинка.
Ширина задаётся вторым аргументом: чем больше значение, тем детальнее изображение.
Ваша СУБД на базе PostgreSQL может делать почти всё. Даже рисовать буквами! 😈