; 210_sharpness-softer_pixel-gradient.scm
; last modified/tested by Paul Sherman [gimphelp.org]
; Wednesday, 07/15/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
;
; pixel-gradient.scm
; Jeff Trefftzs
;==============================================================
(define (210-pixelgradient
inImage
inLayer
minsize
maxsize
nsteps
)
;; If there isn't already a selection, select the whole thing
(let* (
(noselection 0)
)
(if (car (gimp-selection-bounds inImage))
(begin
(set! noselection FALSE)
)
(begin
(gimp-selection-all inImage)
(set! noselection TRUE)
)
)
; start undo group and convert to RGB if image is indexed
(gimp-image-undo-group-start inImage)
(define indexed (car (gimp-drawable-is-indexed inLayer)))
(if (= indexed TRUE)(gimp-image-convert-rgb inImage))
(let* (
(selchannel (car (gimp-selection-save inImage)))
(selstuff (gimp-selection-bounds inImage))
(width
(cond ((car selstuff)
(- (nth 3 selstuff) (nth 1 selstuff)))
(t (car (gimp-image-width inImage)))))
(height
(cond ((car selstuff)
(- (nth 4 selstuff) (nth 2 selstuff)))
(t (car (gimp-image-height inImage)))))
(x0
(cond ((car selstuff)
(nth 1 selstuff))
(t 0)))
(y0
(cond ((car selstuff)
(nth 2 selstuff))
(t 0)))
(x1 width)
(y1 height)
(stepwidth (/ width nsteps))
(pixstep (/ (- maxsize minsize) nsteps))
(startx x0)
(startsize minsize)
)
;; Step across the selection (or image), pixelizing as we go
(while (< startx x1)
(begin
(gimp-image-select-item inImage CHANNEL-OP-REPLACE selchannel)
(gimp-image-select-rectangle inImage CHANNEL-OP-INTERSECT startx y0 stepwidth height)
(plug-in-pixelize TRUE inImage inLayer startsize)
(set! startx (+ startx stepwidth))
(set! startsize (+ startsize pixstep))
)
)
(if (equal? TRUE noselection)
(gimp-selection-none inImage)
(gimp-image-select-item inImage CHANNEL-OP-REPLACE selchannel)
)
)
(gimp-image-set-active-layer inImage inLayer)
(gimp-image-undo-group-end inImage)
(gimp-displays-flush)
)
)
(script-fu-register "210-pixelgradient"
"Pixel Gradient"
"Pixelizes a selection (or layer) from left to right with increasing pixel sizes."
"Jeff Trefftzs"
"Copyright 2003, Jeff Trefftzs"
"November 17, 2003"
"*"
SF-IMAGE "The Image" 0
SF-DRAWABLE "The Layer" 0
SF-ADJUSTMENT "Minimum Pixel Size" '(2 1 256 1 5 0 1)
SF-ADJUSTMENT "Maximum Pixel Size" '(8 1 256 1 5 0 1)
SF-ADJUSTMENT "Number of Steps" '(4 1 256 1 5 0 1)
)
(script-fu-menu-register "210-pixelgradient" "/Script-Fu/Sharpness/Softer")