ImageMagick - Convert dla wielu plików


(wefhy) #1

Temat niekoniecznie stricte linuksowy, ale myślę, że tu najbardziej pasuje.
Uczę się właśnie używania ImageMagick(po kilku dniach muszę powiedzieć - świetne narzędzie, drugie takie obok ffmpeg). Szukam możliwości pomnożenia kanałów alpha wszystkich obrazów png w folderze przez maskę z osobnego pliku.

podobnie jak wykonuję:

oraz dla wszystkich plików:

Chciałbym móc dodać do wszystkich plików w folderze także taki efekt:

(do wszystkich plików file.png tą samą maskę mask.PNG)
Niestety mogrify nie przyjmuje argumentów -compose oraz -composite, a convert nie przyjmuje wielu plików(albo ja nie potrafię mu ich przekazać)
Czy da się coś takiego zrobić pojedynczą komendą bez pisania skryptu w bashu? Dopiero raczkuję w imagemagick i nie bardzo wiem, jak zastąpić -compose i -composite, których mogrify nie obsługuje… Nie ukrywam, że często ułatwiło by mi to nakładanie efektów na grafiki.

Teoretyczny skrypt o tym samym działaniu:

#!/bin/bash for i in *.png do convert $i mask.PNG -channel Alpha -compose Multiply -composite $i done


(gunter) #2

Nie wiem jaki efekt chcesz osiągnąć, ale jeśli chodzi o “pojedynczą komendę” to można zapisać to tak:

for i in *.png ; do convert "$i" mask.PNG -channel Alpha -compose Multiply -composite "zrobione_${i%png}"png ; done

Dla zmiany rozmiaru:
for i in *.png ; do convert "$i" -resize 50% "zrobione_${i%png}"png ; done


(wefhy) #3

Efekt chcę uzyskać taki, że nauczę się brakujących elementów składni imagemagic. Baska już znam, a wiem, że użycie samego imagemagick musi być tu możliwe, tylko nie mogę wykombinować jak. Bash odpada, bo bardziej chcę się czegoś nauczyć, a przy okazji pojedynczą komendę łatwiej wklepać z ręki do terminala.


(fakvat) #4

Czy tą strone odwiedziłeś https://www.imagemagick.org/Usage/masking/?