; ; The GIMP -- an image manipulation program ; Copyright (C) 1995 Spencer Kimball and Peter Mattis ; ; Photo Frame script for GIMP 2.4 AND GIMP 2.6 ; Original author: Alexios Chouchoulas ; inphotos-frame author: Donncha O Caoimh donncha AT inphotos.org ; http://inphotos.org/ ; ; Tags: decor, frame, signature, watermark, copyright, border ; ; 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 ; border at the bottom. Copyright text and url printed in bottom ; white border. ; ; 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). ; ; Uses alexios-photoframe.scm by Alexios Chouchoulas. I only changed a ; few minor variables and added the text. ; - Donncha O Caoimh, Feb 2009 ; ; -------------------------------------------------------------------- ; ; 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 . ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Define the function: (define (inphotos-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 NORMAL-MODE))) (gimp-image-add-layer inImage theLayer 0) (gimp-palette-set-background inColour) (gimp-edit-clear theLayer) (gimp-edit-fill theLayer BG-IMAGE-FILL) (gimp-image-lower-layer-to-bottom inImage theLayer) ; inImage ) ) (define (inphotos-draw-text 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 23) 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 NORMAL-MODE))) (gimp-image-add-layer inImage theLayer 0) (gimp-palette-set-background inColour) (gimp-edit-clear theLayer) (gimp-edit-fill theLayer BG-IMAGE-FILL) (gimp-context-set-background '(255 255 255)) (gimp-context-set-foreground '(0 0 0)) (let* ( (TextLayer (car (gimp-text-fontname inImage -1 (- theWidth 230) (- theHeight 18) "Donncha O Caoimh, http://inphotos.org/" 0 TRUE 11 PIXELS "Sans"))) (gimp-image-merge-down inImage TextLayer CLIP-TO-IMAGE)) ) (gimp-image-lower-layer-to-bottom inImage theLayer) ; inImage ) ) (define (script-fu-inphotos-frame inImage inLayer ) (let* ( (theImage 0) (theWidth 0) (theHeight 0) (mode 0) (inPaddingWidth 0) (inPaddingColour (list 255 255 255)) (inFrameWidth 2) (inFrameColour (list 0 0 0)) (inCopy 0) (inFlatten 0) ) ;Start an undo group so the process can be undone with one undo (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 (car (gimp-drawable-type-with-alpha inLayer))) (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. (inphotos-draw-frame theImage inFrameWidth inFrameColour "Frame" mode) ; Draw the padding. (inphotos-draw-text 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) ) () ) ; The end. ;Finish the undo group for the process (gimp-image-undo-group-end inImage) (gimp-displays-flush) ) ) ; Register the function with the GIMP: (script-fu-register "script-fu-inphotos-frame" _"/Filters/Decor/Copyright Photo Frame..." "Frame a photograph" "Donncha O Caoimh" "2003, Alexios Chouchoulas. 2009, Donncha O Caoimh" "20th September 2003" "RGB* GRAY* INDEXED*" SF-IMAGE "The Image" 0 SF-DRAWABLE "The Layer" 0 ) ;;; End Of File.