I had a set of many scanned images from magazine pages, the sizes were varying and I wanted to apply the GIMP erode filter to enhance the text readability. Generally for image batch processing I use Imagemagick from the command line, but I was not able to reproduce the erode filter with Imagemagick, so I searched the recipe to do batch processing with the GIMP.
You can apply the erode filter in GIMP from menu Filters ⇒ Generic ⇒ Erode. There is no dialog box to control the filter parameters, but it turned out that when you want to call the plug-in-erode function from a script you have to pass several parameters.
To inspect the required parameters go to menu Filters ⇒ Script-Fu ⇒ Console ⇒ Browse. Here you are into the Script-Fu Procedure Browser and you can search for the plug-in-erode procedure. For each parameter you have the type (e.g. float or integer) and a brief description:
It is not simple to have an explanation of each paramter, so I proceeded by trials. It turned out that the wanted result is obtaiuned by passing propagate-mode = O:white. I set to zero the other parameters too.
The next step was to create a script which will simply call the plug-in, this is the file that I saved as simple-myerode.scm:
(define (simple-myerode filename propagate-mode propagating-channel propagating-rate direction-mask lower-limit upper-limit) (let* ((image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) (drawable (car (gimp-image-get-active-layer image)))) (plug-in-erode RUN-NONINTERACTIVE image drawable propagate-mode propagating-channel propagating-rate direction-mask lower-limit upper-limit) (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename) (gimp-image-delete image)))
Copy the script into the $HOME/.config/GIMP/2.10/scripts/ directory, no particular action is required to enable it.
Now it is possibile to execute the GIMP in batch mode, using the -b option. Calling the custom function simple-myerode
you can pass the paramteres:
#!/bin/bash gimp -i -b "(simple-myerode \"IMAGE.JPG\" 0 0 0 0 0 0)" -b '(gimp-quit 0)'
The final recipe works as follow:
This is the full script, which receives the filename to be processed and saves the output file into the ./outdir/ directory:
#!/bin/bash BASENAME="$(basename "$1")" TMP="tmp.$$.png" convert "$1" -scale '250%' "$TMP" cp -p simple-myerode.scm /home/niccolo/.config/GIMP/2.10/scripts/ gimp -i -b "(simple-myerode \"$TMP\" 0 0 0 0 0 0)" -b '(gimp-quit 0)' convert "$TMP" -unsharp '0x3+1.0+0' \ -scale 'x2000' -gravity center -crop '1400:2000' \ -background white -extent '1400x2000' -density 200 -units PixelsPerInch \ -quality 90 \ "./outdir/$BASENAME" rm "$TMP"