; 210_shapes_stampify.scm
; last modified/tested by Paul Sherman [gimphelp.org]
; Wednesday, 07/15/2020on 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
;
; adapted for GIMP-2 by Eddy Verlinden
; filter found at: http://users.telenet.be/ev1/gimpphotoeffects_en.html
;==============================================================
(define (210-stampify img drawable paper hole diameter gap marg)
(let* (
(owidth (car (gimp-image-width img)))
(oheight (car (gimp-image-height img)))
(nw (+ diameter (+ owidth (* 2 marg))))
(nh (+ diameter (+ oheight (* 2 marg))))
(img2 (car (gimp-image-new nw nh RGB)))
(layer1 (car (gimp-layer-new img2 nw nh 0 "Layer1" 100 LAYER-MODE-NORMAL-LEGACY)))
(nholes 0)
(pos 0)
(i 0)
(dist 0)
)
(gimp-image-insert-layer img2 layer1 0 0)
(gimp-image-set-active-layer img2 layer1)
(gimp-context-set-background paper)
(gimp-drawable-fill layer1 1)
(gimp-selection-none img2)
; calculate number of horisontal holes
(set! nholes (/ (+ nw gap) (+ diameter gap)))
(set! pos 0)
(set! i 0)
; loop horisontally
(while (< i nholes)
(gimp-image-select-ellipse img2 CHANNEL-OP-ADD pos 0 diameter diameter)
(set! pos (+ pos diameter gap))
(set! i (+ i 1))
)
; calculate number of vertical holes
(set! nholes (/ (+ nh gap) (+ diameter gap)))
(set! pos 0)
(set! i 0)
; loop vertically
(while (< i nholes)
(gimp-image-select-ellipse img2 CHANNEL-OP-ADD 0 pos diameter diameter)
(set! pos (+ pos diameter gap))
(set! i (+ i 1))
)
; and fill the holes with a colour
(gimp-context-set-background hole)
(gimp-edit-fill layer1 1)
(gimp-selection-none img2)
; and here comes the clever part:
; offset horis and vert holes by half the diameter
(set! dist (* -1 (/ diameter 2)))
(gimp-drawable-offset layer1 1 0 dist dist)
; insert old image into a new layer in img2
(gimp-selection-all img)
(gimp-edit-copy drawable)
(let ((floating-sel (car (gimp-edit-paste layer1 0))))
(gimp-floating-sel-anchor floating-sel)
)
; and return command to The Gimp
(gimp-image-clean-all img2)
(gimp-display-new img2)
)
)
(script-fu-register "210-stampify"
"Stampify"
"Will hopefully make an image look like a postage stamp."
"Claes G Lindblad "
"Claes G Lindblad "
"990330"
"*"
SF-IMAGE "Input Image" 0
SF-DRAWABLE "Input Drawable" 0
SF-COLOR "Paper colour" '(242 242 242)
SF-COLOR "Hole colour" '(153 153 153)
SF-VALUE "Diameter of perforation" "10"
SF-VALUE "Gap between perforations" "5"
SF-VALUE "Marginal between art and perforations" "7"
)
(script-fu-menu-register "210-stampify" "/Script-Fu/Shapes")