; 210_edges_photoframe.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 ; ;================================================== ; Edited on 12/01/2007 by Paul Sherman to fix UNDO functionality ; when NOT working on a copy. Menu location also changed. ; tested on GIMP-2.4.1 ; udated again for gimp-2.6 by Paul - 11/20/2008 ; 12/15/2008 - ; pulled use with alpha layer until I get it to behave - PS ; 10/15/2010 - fixed undo glitch that left stray "select all" if undone. ; ; 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 ; ; The GIMP -- an image manipulation program ; Copyright (C) 1995 Spencer Kimball and Peter Mattis ; ; Photo Frame script for GIMP 2.4 ; Original author: Alexios Chouchoulas ; ; Author statement: ; This is a rather simple script to produce a photographic frame ; around an image. This resembles a simplistic full-frame print: a ; thin black frame outlines the photograph itself, with thicker white ; borders around frame and picture. The colours and thicknesses are, ; of course, customisable. ; ; Written on top of Chris Gutteridge's (cjg@ecs.soton.ac.uk) Fuzzy ; Border script (which was only used as a template, but there you go). ; ; -------------------------------------------------------------------- ; (define (alexios-draw-frame inImage inFrameWidth inColour inLayerName) (let* ( (theWidth 0) (theHeight 0) (theLayer 0) ) (set! theWidth (car (gimp-image-width inImage))) (set! theHeight (car (gimp-image-height inImage))) (gimp-image-resize inImage (+ theWidth (* inFrameWidth 2)) (+ theHeight (* inFrameWidth 2)) inFrameWidth inFrameWidth) (gimp-selection-all inImage) (set! theWidth (car (gimp-image-width inImage))) (set! theHeight (car (gimp-image-height inImage))) (set! theLayer (car (gimp-layer-new inImage theWidth theHeight RGBA-IMAGE inLayerName 100 LAYER-MODE-NORMAL-LEGACY))) (gimp-image-insert-layer inImage theLayer 0 0) (gimp-context-set-background inColour) (gimp-edit-clear theLayer) (gimp-edit-fill theLayer FILL-BACKGROUND) (gimp-image-lower-item-to-bottom inImage theLayer) ) ) (define (210-photo-frame inImage inLayer inFrameColour inFrameWidth inPaddingColour inPaddingWidth inCopy inFlatten ) (let* ( (theImage 0) (theWidth 0) (theHeight 0) (mode 0) ) (gimp-image-undo-group-start inImage) (gimp-selection-all inImage) (set! theImage (if (= inCopy TRUE) (car (gimp-image-duplicate inImage)) inImage) ) (if (< 0 (car (gimp-image-base-type theImage))) (gimp-image-convert-rgb theImage)) (set! mode 'RGBA-IMAGE) (set! theWidth (car (gimp-image-width theImage))) (set! theHeight (car (gimp-image-height theImage))) ; Add an alpha channel to the bottom layer. (let* ( (layers (gimp-image-get-layers theImage)) (num-layers (car layers)) (layer-array (cadr layers))) (gimp-layer-add-alpha (aref layer-array (- num-layers 1)))) ; Draw the frame. (alexios-draw-frame theImage inFrameWidth inFrameColour "Frame" mode) ; Draw the padding. (alexios-draw-frame theImage inPaddingWidth inPaddingColour "Padding" mode) ; Flatten the image, if we need to. (if (= inFlatten TRUE) (gimp-image-flatten theImage) ()) ; Have we been working on a copy? If so display the new image. (if (= inCopy TRUE) (begin (gimp-image-clean-all theImage) (gimp-display-new theImage) ) () ) (gimp-image-undo-group-end inImage) (gimp-displays-flush) ) ) ; Register the function with the GIMP: (script-fu-register "210-photo-frame" "Photo Frame" "Frame a photograph" "Alexios Chouchoulas" "2003, Alexios Chouchoulas" "20th September 2003" "RGB GRAY INDEXED" SF-IMAGE "The Image" 0 SF-DRAWABLE "The Layer" 0 SF-COLOR "Frame color" '(0 0 0) SF-ADJUSTMENT "Frame width" '(3 1 300 1 10 0 1) SF-COLOR "Padding color" '(255 255 255) SF-ADJUSTMENT "Padding width" '(10 1 300 1 10 0 1) SF-TOGGLE "Work on Copy" TRUE SF-TOGGLE "Flatten Image" TRUE ) (script-fu-menu-register "210-photo-frame" "/Script-Fu/Edges")