; 210_photo_vintage-effect.scm
; last modified/tested by Paul Sherman [gimphelp.org]
; Thursday, 07/02/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
;
;==================================================
; 04/27/2008 - Edited by Paul Sherman
; added faded border option
;
; 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
;
; Vintage Film Effect script for GIMP 2.4
; Original author: Alexia Death
; Tags: photo, vintage
; Author statement:
;
; Based on paint net tutorial by fallout75.
; (http://www.flickr.com/photos/fallout75/)
; This represents my first attempt at gimp scripting and my first
; ever contact with Scheme language. If you feel its not as good
; as it can be, feel free to improve it.
;==============================================================
(define (210-vintage-effect
inImage
inLayer
inCopy
inFlatten
inBorder
)
(let (
(theWidth (car (gimp-image-width inImage)))
(theHeight (car (gimp-image-height inImage)))
(theImage 0)
(base 0)
(sepia 0)
(magenta 0)
(floating-sel 0)
(control_pts_r (cons-array 10 'byte))
(control_pts_g (cons-array 8 'byte))
(control_pts_b (cons-array 4 'byte))
)
(set! theImage (if (= inCopy TRUE)
(car (gimp-image-duplicate inImage))
inImage
)
)
(if (= inCopy FALSE)
(begin
(gimp-image-undo-group-start theImage)
)
)
(if (> (car (gimp-drawable-type inLayer)) 1)(gimp-image-convert-rgb theImage))
; flattening the image at hand into a copy
(gimp-edit-copy-visible theImage)
; Making base layer
(set! base (car (gimp-layer-new theImage
theWidth
theHeight
RGBA-IMAGE
"base"
100
LAYER-MODE-NORMAL-LEGACY)))
(gimp-image-insert-layer theImage base 0 -1)
(gimp-floating-sel-anchor (car (gimp-edit-paste base TRUE)))
(gimp-hue-saturation base ALL-HUES 0 0 15)
(gimp-brightness-contrast base 0 20)
(set! control_pts_r #(0 0 88 47 170 188 221 249 255 255))
(set! control_pts_g #(0 0 65 57 184 208 255 255))
(set! control_pts_b #(0 29 255 226))
(gimp-curves-spline base HISTOGRAM-RED 10 control_pts_r)
(gimp-curves-spline base HISTOGRAM-GREEN 8 control_pts_g)
(gimp-curves-spline base HISTOGRAM-BLUE 4 control_pts_b)
; making sepia layer
(set! sepia (car (gimp-layer-new theImage
theWidth
theHeight
RGBA-IMAGE
"sepia"
100
LAYER-MODE-NORMAL-LEGACY)))
(gimp-image-insert-layer theImage sepia 0 -1)
(gimp-floating-sel-anchor (car (gimp-edit-paste sepia TRUE)))
(gimp-colorize sepia 25 25 30)
(gimp-brightness-contrast sepia 40 30)
(gimp-layer-set-opacity sepia 50)
; making magenta layer
(set! magenta (car (gimp-layer-new theImage
theWidth
theHeight
RGBA-IMAGE
"magenta"
100
LAYER-MODE-SCREEN-LEGACY)))
(gimp-image-insert-layer theImage magenta 0 -1)
(gimp-context-push)
(gimp-context-set-foreground '(255 0 220))
(gimp-drawable-fill magenta FOREGROUND-FILL)
(gimp-layer-set-opacity magenta 6)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if (= inBorder TRUE)
(begin
(gimp-selection-all theImage)
(gimp-selection-shrink theImage 4)
(gimp-selection-invert theImage)
(gimp-selection-feather theImage 24)
(gimp-context-set-foreground '(166 129 71))
(gimp-edit-fill base FOREGROUND-FILL)
(gimp-selection-none theImage)
))
(gimp-context-pop)
(if (= inFlatten TRUE)(gimp-image-flatten theImage))
(if (= inCopy TRUE)
(begin
(gimp-image-clean-all theImage)
(gimp-display-new theImage)
)
)
(if (= inCopy FALSE)
(begin
(gimp-image-undo-group-end theImage)
)
)
(gimp-displays-flush)
)
)
(script-fu-register "210-vintage-effect"
"Vintage Photo"
"Make image look like an old photograph."
"Alexia Death"
"2007, Alexia Death."
"3rd October 2007"
"*"
SF-IMAGE "The image" 0
SF-DRAWABLE "The layer" 0
SF-TOGGLE "Work on copy" FALSE
SF-TOGGLE "Flatten image" FALSE
SF-TOGGLE "Faded Border" TRUE
)
(script-fu-menu-register "210-vintage-effect" "/Script-Fu/Photo")