====== Batch processing of images with GIMP ====== 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. ===== The plug-in-erode filter ===== 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: * run-mode * image * drawable * propagate-mode * propagating-channel * propagating-rate * direction-mask * lower-limit * upper-limit 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. ===== Creating a script to call plug-in-erode ===== 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. ===== Call the script from the command line ===== 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)' ===== Combining Imagemagick and GIMP ===== The final recipe works as follow: * Enlarge the image at 250% with Imagemagick. This proved to be the best choice to enhance the text readability via the erode filter. This is because the erode filter works by adding a single pixel around the dark parts. * Apply the GIMP erode filter. * Use Imagemagick to apply the **%%-unsharp%%** filter. Resize to the original size and crop/resize the image to a fixed size, even if the input image is slightly wider or narrower. Force the resolution to 200 dpi ignoring that of the original image. 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"