; 210_color_tone-mapping.scm ; last modified/tested by Paul Sherman [gimphelp.org] ; Wednesday, 07/01/2020 on GIMP 2.10.20 ;================================================== ; ; Installation: ; This script should be placed in the user or system-wide script folder. ; ; Windows 7/10 ; C:\Program Files\GIMP 2\share\gimp\2.0\scripts ; or ; C:\Users\YOUR-NAME\AppData\Roaming\GIMP\2.10\scripts ; ; ; Linux ; /home/yourname/.config/GIMP/2.10/scripts ; or ; Linux system-wide ; /usr/share/gimp/2.0/scripts ; ;================================================== ; ; LICENSE ; ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program. If not, see . ; ;============================================================== ; Original information ; ; Tonemapping is a script for The GIMP ; ; Reduce global contrast while increasing local contrast ; and shadow/highlight detail. ; ; Copyright (C) 2007 Harry Phillips ;============================================================== (define (my-duplicate-layer image layer) (let* ((dup-layer (car (gimp-layer-copy layer 1)))) (gimp-image-insert-layer image dup-layer 0 0) dup-layer)) (define (210-tone-mapping theImage theLayer blurAmount opacityAmount inMerge ) ;Start an undo group so the process can be undone with one undo (gimp-image-undo-group-start theImage) ; convert to RGB if neeeded (if (not (= RGB (car (gimp-image-base-type theImage)))) (gimp-image-convert-rgb theImage)) (let ( (copy1 (my-duplicate-layer theImage theLayer)) (copy2 (my-duplicate-layer theImage theLayer)) ) ;Apply the desaturate and invert to the top layer (gimp-desaturate copy2) (gimp-invert copy2) ;Apply the blur with the supplied blur amount (plug-in-gauss 1 theImage copy2 blurAmount blurAmount 0) ;Set the layers opacity (gimp-layer-set-opacity copy2 75) ;Merge the top layer down and keep track of the newly merged layer (let ((merged (car (gimp-image-merge-down theImage copy2 0)))) ;Change the merged layers mode to SOFT LIGHT (19) (gimp-layer-set-mode merged 19) ;Change the merged layers opacity (gimp-layer-set-opacity merged opacityAmount)) (if (= inMerge TRUE)(gimp-image-merge-visible-layers theImage EXPAND-AS-NECESSARY)) ;Finish the undo group for the process (gimp-image-undo-group-end theImage) ;Ensure the updated image is displayed now (gimp-displays-flush) ) ) (script-fu-register "210-tone-mapping" "Tone Mapping" "Performs a tone mapping operation with a specified blur on the open image" "David Meiklejohn, Harry Phillips (Process)" "2006, David Meiklejohn, Harry Phillips (Process)" "Feb. 02 2006" "*" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 SF-ADJUSTMENT "Blur:" '(100 100 500 10 10 1 0) SF-ADJUSTMENT "Opacity" '(90 0 100 1 10 1 0) SF-TOGGLE "Merge layers when complete?" FALSE ) (script-fu-menu-register "210-tone-mapping" "/Script-Fu/Color")