From 71870b1510dfc2727093f2767b994b8596f9b163 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Thu, 5 Nov 2020 12:28:32 +0300 Subject: [PATCH] =?utf8?q?netpbm=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=20?= =?utf8?q?=D0=B8=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B8=D1=80=D0=BE=D0=B2?= =?utf8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD?= =?utf8?q?=D0=BA=D0=B8=20=D0=B2=205LoC=20bash?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. -- 2.48.1