;
; 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.