Image manipulations

Reduce png files with pngcrush

Find all png, exclude those who are already reduced (in filename) and use parallel to treat multiples at once

find . -name "*.png" \! -name '*reduced*' | parallel -eta pngcrush -v -brute -reduce {} {.}_reduced.png

Note that this take a long time per image (around 2 to 4 mins) because it take time to check all protocoles and use the most efficient.

List reduced :

find . -name '*reduced*' | wc -l

List original :

find . -name "*.png" \! -name '*reduced*' | wc -l

Remove originals :

find . -name "*.png" \! -name '*reduced*' -exec rm -f {} \;

Convert animated webp to gif

for f in *.webp;do echo "$f";python3 -c "from PIL import Image;Image.open('$f').save('${f%.webp}.gif','gif',save_all=True,optimize=True,background=0)";done

Source

Merge image

Horizontally

montage [0-4].png -tile 5x1 -geometry +0+0 out.png

Vertically

montage [0-4].png -tile 1x5 -geometry +0+0 out.png

Source

Merge images in a grid

montage -density 300 -tile 2x0 -geometry +5+50 -border 10 *.png out.png

Source

Convert png to webp losslessly and keeping date

#!/bin/bash

inputFile="$1"
outputFile="${inputFile}.lossless.webp"
cwebp -lossless -exact "$inputFile" -o "$outputFile"
touch -r "$inputFile" -c "$outputFile"

converttowebplossless && mkdir webp && mv -v *.webp -t webp/ && mkdir png && mv -v *.png -t png/ && ncdu && rm png/ -rvf && mv -v webp/* . && rename "s/.png.lossless//g" *.webp && rmdir webp/