[Системное администрирование, Обработка изображений, Разработка под Linux] Генерация изображений с помощью echo/printf в 5 строчках кода без библиотек и заголовков (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
tl;dr: форматы файлов Netpbm позволяют легко выводить пиксели, используя только текстовый ввод-вывод.
Вот весь генерирующий это изображение скрипт bash без зависимостей:
#!/bin/bash
exec > my_image.ppm # Все инструкции echo будут писать в этот файл
echo "P3 250 250 255" # формат, ширина, высота, максимальное значение цвета
for ((y=0; y<250; y++)) {
for ((x=0; x<250; x++)) {
echo "$((x^y)) $((x^y)) $((x|y))" # r, g, b
}
}
Это все, что нужно для генерации изображения, которое можно будет считать стандартными инструментами вроде GIMP, ImageMagick и Netpbm.
Дополню, что иногда удобно выводить изображение для отладки 2D-алгоритмов с помощью printf, визуализации данных или просто для отображения на экране процедурных пикселей.
Тем не менее если изначально не знать о примере выше, то порог для реализации вывода графики может показаться достаточно высоким. Даже если использовать библиотеку single_file, это будет означать необходимость настройки еще одного компонента. И это особенно неприятно в случае отладки, когда знаешь, что буквально в течение часа его удалишь.
К счастью, пакет инструментов Netpbmпредлагает на удивление гибкое решение: набор форматов файлов с «наименьшим общим знаменателем» для полноцветных Portable PixMaps (PPM), Portable GreyMaps (PGM) и монохромных Portable BitMaps (PBM), которые все можно записать в виде простого текста ASCII через базовый ввод-вывод любого языка.
Все вместе эти форматы известны как PNM: Portable aNyMaps.
Вышеприведенного скрипта bash вполне достаточно для начала, тем не менее подробное описание этого формата файлов можно найти в man ppm, man pgm и man pbm в системе, где установлен Netpbm.
Каждая страница руководства описывает две версии простого формата: двоичную и в кодировке ASCII. Любая из них реализуется очень легко, хотя ASCII-вариант мне нравится больше за его полнейшую простоту, которая позволяет прописывать такие файлы даже в Notepad.
Для преобразования их в более распространенные форматы нужно либо выполнить экспорт в GIMP, либо использовать команду ImageMagick convert my_file.ppm my_file.png, либо команду NetPBM pnmtopng < my_file.ppm > my_file.png.
Если вы решите передать изображения, используя этот простой формат ASCII, то команда NetPBM pnmtoplainpnm преобразует двоичный ppm/pgm/pbm (создаваемый любым инструментом, включая anytopnm из Netpbm) в ASCII ppm/pgm/pbm.
Если вы захотите поэкспериментировать с каким-либо алгоритмом обработки изображений, то можете легко задействовать прекрасный набор инструментов Netpbm путем чтения/записи PPM через stdin/stdout:
curl http://example.com/input.png |
pngtopnm |
ppmbrighten -v +10 |
yourtoolhere |
pnmscale 2 |
pnmtopng > output.png
оригинал
===========
Источник:
habr.com
===========
===========
Автор оригинала: Vidar
===========Похожие новости:
- [Настройка Linux, Node.JS, Серверное администрирование, Go] Слабо поднять такой крошечный контейнер? Создаем контейнеризованный HTTP-сервер на 6kB (перевод)
- [Системное администрирование, IT-инфраструктура, Cisco, Сетевые технологии] Сброс пароля и базовая настройка Cisco 1941
- Команда из Университета Миннесоты пояснила мотивы экспериментов с сомнительными коммитами в ядро Linux
- [Программирование, C, Компьютерное железо, DIY или Сделай сам] Не простые проблемы простого устройства — тачскрин
- [Python, Обработка изображений, Машинное обучение] Распознавание дорожных знаков
- [Производство и разработка электроники, Компьютерное железо, Ноутбуки] Энтузиасты собирают ноутбук на электронной бумаге. Выбираем дисплей и шасси
- [Системное администрирование, *nix, Разработка под Linux] Заметки о Unix: небольшая странность семейства вызовов exec*() (перевод)
- [Open source, Разработка под Linux] Линус Торвальдс прокомментировал бан Миннесотского университета сообществом разработчиков Linux
- [Хранение данных, Криптовалюты] Разговор с майнером Chia, имеющим 1ПБ ёмкости
- [Системное администрирование, IT-инфраструктура, *nix, Софт] FreeBSD. Путь сетевого пакета внутри ядра
Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_obrabotka_izobrazhenij (Обработка изображений), #_razrabotka_pod_linux (Разработка под Linux), #_ruvds_perevod (ruvds_перевод), #_linux, #_bash, #_obrabotka_izobrazhenij (обработка изображений), #_blog_kompanii_ruvds.com (
Блог компании RUVDS.com
), #_sistemnoe_administrirovanie (
Системное администрирование
), #_obrabotka_izobrazhenij (
Обработка изображений
), #_razrabotka_pod_linux (
Разработка под Linux
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 10:36
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
tl;dr: форматы файлов Netpbm позволяют легко выводить пиксели, используя только текстовый ввод-вывод. Вот весь генерирующий это изображение скрипт bash без зависимостей: #!/bin/bash
exec > my_image.ppm # Все инструкции echo будут писать в этот файл echo "P3 250 250 255" # формат, ширина, высота, максимальное значение цвета for ((y=0; y<250; y++)) { for ((x=0; x<250; x++)) { echo "$((x^y)) $((x^y)) $((x|y))" # r, g, b } } Это все, что нужно для генерации изображения, которое можно будет считать стандартными инструментами вроде GIMP, ImageMagick и Netpbm. Дополню, что иногда удобно выводить изображение для отладки 2D-алгоритмов с помощью printf, визуализации данных или просто для отображения на экране процедурных пикселей. Тем не менее если изначально не знать о примере выше, то порог для реализации вывода графики может показаться достаточно высоким. Даже если использовать библиотеку single_file, это будет означать необходимость настройки еще одного компонента. И это особенно неприятно в случае отладки, когда знаешь, что буквально в течение часа его удалишь. К счастью, пакет инструментов Netpbmпредлагает на удивление гибкое решение: набор форматов файлов с «наименьшим общим знаменателем» для полноцветных Portable PixMaps (PPM), Portable GreyMaps (PGM) и монохромных Portable BitMaps (PBM), которые все можно записать в виде простого текста ASCII через базовый ввод-вывод любого языка. Все вместе эти форматы известны как PNM: Portable aNyMaps. Вышеприведенного скрипта bash вполне достаточно для начала, тем не менее подробное описание этого формата файлов можно найти в man ppm, man pgm и man pbm в системе, где установлен Netpbm. Каждая страница руководства описывает две версии простого формата: двоичную и в кодировке ASCII. Любая из них реализуется очень легко, хотя ASCII-вариант мне нравится больше за его полнейшую простоту, которая позволяет прописывать такие файлы даже в Notepad. Для преобразования их в более распространенные форматы нужно либо выполнить экспорт в GIMP, либо использовать команду ImageMagick convert my_file.ppm my_file.png, либо команду NetPBM pnmtopng < my_file.ppm > my_file.png. Если вы решите передать изображения, используя этот простой формат ASCII, то команда NetPBM pnmtoplainpnm преобразует двоичный ppm/pgm/pbm (создаваемый любым инструментом, включая anytopnm из Netpbm) в ASCII ppm/pgm/pbm. Если вы захотите поэкспериментировать с каким-либо алгоритмом обработки изображений, то можете легко задействовать прекрасный набор инструментов Netpbm путем чтения/записи PPM через stdin/stdout: curl http://example.com/input.png |
pngtopnm | ppmbrighten -v +10 | yourtoolhere | pnmscale 2 | pnmtopng > output.png оригинал =========== Источник: habr.com =========== =========== Автор оригинала: Vidar ===========Похожие новости:
Блог компании RUVDS.com ), #_sistemnoe_administrirovanie ( Системное администрирование ), #_obrabotka_izobrazhenij ( Обработка изображений ), #_razrabotka_pod_linux ( Разработка под Linux ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 10:36
Часовой пояс: UTC + 5