From: Sergey Matveev Date: Thu, 5 Nov 2020 09:28:32 +0000 (+0300) Subject: netpbm формат и генерирование картинки в 5LoC bash X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=71870b1510dfc2727093f2767b994b8596f9b163;p=stargrave-blog.git netpbm формат и генерирование картинки в 5LoC bash https://www.vidarholen.net/contents/blog/?p=904 Я давний "поклонник" netpbm утилит и форматов. Мне кажется что уже наверное лет 15 я для работы с изображениями только его и использую. #!/bin/bash exec > my_image.ppm # All echo statements will write here echo "P3 250 250 255" # magic, width, height, max component value for ((y=0; y<250; y++)) { for ((x=0; x<250; x++)) { echo "$((x^y)) $((x^y)) $((x|y))" # r, g, b } } netpbm это набор утилит для работы с PNM файлами. PNM-ы бывают: PBM (bitmap, монохромный), PGM (graymap, серый), PPM (pixmap, цветной), PAM (цветной, ещё и с альфа-каналом). Каждый из них может быть представлен в ASCII текстовом формате (как в примере выше), где задаётся формат, размеры изображения и глубина на канал. Или в аналогичном, но бинарном формате. Например когда я недавно занимался сканированием фотографий, то мне надо было и обрезать, и scale-ить, и менять глубину цвета, и кучу других подобных вещей. Изображение перегоняется в PNM, дальше через pipe-ы применяются фильтры, дальше PNM преобразуется в нужный формат (JPEG2000, WebP, и т.д.). Ещё вот позже появился suckless проект: https://tools.suckless.org/farbfeld/ где формат тоже предельно прост: 8 -- "farbfeld" magic value 4 -- 32-Bit BE unsigned integer (width) 4 -- 32-Bit BE unsigned integer (height) [2222] -- 4x16-Bit BE unsigned integers [RGBA] / pixel, row-major В принципе мне он нравится больше, так как наборы PNM форматов это только ведь об эффективности. Хотя... в том числе и про удобство для генерирования/обработки наверное тоже, но преобразовать в RGBA и обратно совсем не проблема. Из коробки farbfeld, конечно же, имеет и конвертеры в PAM/PPM. ---