]> Sergey Matveev's repositories - stargrave-blog.git/commit
netpbm формат и генерирование картинки в 5LoC bash
authorSergey Matveev <stargrave@stargrave.org>
Thu, 5 Nov 2020 09:28:32 +0000 (12:28 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Thu, 5 Nov 2020 09:28:32 +0000 (12:28 +0300)
commit71870b1510dfc2727093f2767b994b8596f9b163
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent9577c8ac094e2ce292ab61332f4a41b13314bc77
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.