;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Serge Mankovski B/W Film Simulation ; ; Copyright Serge Mankovski (sevato@mankovski.com) ; Toronto, Ontario, 2007 ; ; Version 1.1 March 30, 2007 ; ; Converts selected layer into Black and White using channel mixer ; Uses channel presets found on Internet. I am not sure about the origin of these ; settings and I do not know if they really produce result resembling tonal qualities of ; the film, but it produces nice looking B/W and it is a useful way to convert to black and white ; ; Change Log: ; Version 1.1 ; - added IR film simulation ; - added color filters applied before b/w conversion ; - added saturation option ; - Gimp 2.3.15+ support ; ; Version 1.1.1 Various fixes by Ari Pollak - thanks! ; ; 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 2 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, write to the Free Software ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (create-new-layer img drawable) (let ((layer drawable)) (set! layer (car (gimp-layer-copy drawable TRUE))) (gimp-image-add-layer img layer -1) layer)) (define (script-fu-bw-film img drawable film filter rename new-layer increase-local-contrast auto-levels drop-gamma saturate ) (let ((bw-layer nil) (chan-name "")) (gimp-image-undo-group-start img) ; Start an undo group. (if (equal? new-layer TRUE) (set! bw-layer (create-new-layer img drawable)) (set! bw-layer drawable) ) ; (if (equal? auto-levels TRUE) (gimp-levels-stretch bw-layer) ()) (if (equal? saturate TRUE) (plug-in-colors-channel-mixer 1 img bw-layer FALSE 1.3 -0.15 -0.15 -0.15 1.3 -0.15 -0.15 -0.15 1.3) ()) (if (equal? drop-gamma TRUE) (gimp-levels bw-layer 0 0 255 0.9 0 255) ()) (cond ; Yellow Filter ((= filter 1) (gimp-hue-saturation bw-layer 0 -5 0 33) (set! chan-name (string-append chan-name " Yellow Filter"))) ; Orange Filter ((= filter 2) (gimp-hue-saturation bw-layer 0 -20 0 25) (set! chan-name (string-append chan-name " Orange Filter"))) ; Red Filter ((= filter 3) (gimp-hue-saturation bw-layer 0 -41 0 25) (set! chan-name (string-append chan-name " Red Filter"))) ; Green Filter ((= filter 4) (gimp-hue-saturation bw-layer 0 90 0 33) (set! chan-name (string-append chan-name " Green Filter"))) ; Blue Filter ((= filter 5) (gimp-hue-saturation bw-layer 0 -145 0 25) (set! chan-name (string-append chan-name " Blue Filter"))) ) (cond ; Agfa 200X ((= film 0) (set! chan-name (string-append chan-name " Agfa 200X")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.18 0.41 0.41 0.18 0.41 0.41 0.18 0.41 0.41 )) ; Agfapan 25 ((= film 1) (set! chan-name (string-append chan-name " Agfapan 25")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.25 0.39 0.36 0.25 0.39 0.36 0.25 0.39 0.36 )) ; Agfapan 100 ((= film 2) (set! chan-name (string-append chan-name " Agfapan 100")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.21 0.40 0.39 0.21 0.40 0.39 0.21 0.40 0.39 )) ; Agfapan 400 ((= film 3) (set! chan-name (string-append chan-name " Agfapan 400")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.20 0.41 0.39 0.20 0.41 0.39 0.20 0.41 0.39 )) ; Ilford Delta 100 ((= film 4) (set! chan-name (string-append chan-name " Ilford Delta 100")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.21 0.42 0.37 0.21 0.42 0.37 0.21 0.42 0.37 )) ; Ilford Delta 400 ((= film 5) (set! chan-name (string-append chan-name " Ilford Delta 400")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.22 0.42 0.36 0.22 0.42 0.36 0.22 0.42 0.36 )) ; Ilford Delta 400 Pro & 3200 ((= film 6) (set! chan-name (string-append chan-name " Ilford Delta 400 Pro & 3200")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.31 0.36 0.33 0.31 0.36 0.33 0.31 0.36 0.33 )) ; Ilford FP4 ((= film 7) (set! chan-name (string-append chan-name " Ilford FP4")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.28 0.41 0.31 0.28 0.41 0.31 0.28 0.41 0.31 )) ; Ilford HP5 ((= film 8) (set! chan-name (string-append chan-name " Ilford HP5")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.23 0.37 0.40 0.23 0.37 0.40 0.23 0.37 0.40 )) ; Ilford Pan F ((= film 9) (set! chan-name (string-append chan-name " Ilford Pan F")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.33 0.36 0.31 0.33 0.36 0.31 0.33 0.36 0.31 )) ; Ilford SFX ((= film 10) (set! chan-name (string-append chan-name " Ilford SFX")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.36 0.31 0.33 0.36 0.31 0.33 0.36 0.31 0.33 )) ; Ilford XP2 Super ((= film 11) (set! chan-name (string-append chan-name " Ilford XP2 Super")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.21 0.42 0.37 0.21 0.42 0.37 0.21 0.42 0.37 )) ; Kodak Tmax 100 ((= film 12) (set! chan-name (string-append chan-name " Kodak Tmax 100")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.24 0.37 0.39 0.24 0.37 0.39 0.24 0.37 0.39 )) ; Kodak Tmax 400 ((= film 13) (set! chan-name (string-append chan-name " Kodak Tmax 400")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.27 0.36 0.37 0.27 0.36 0.37 0.27 0.36 0.37 )) ; Kodak Tri-X ((= film 14) (set! chan-name (string-append chan-name " Kodak Tri-X")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.25 0.35 0.40 0.25 0.35 0.40 0.25 0.35 0.40 )) ; Kodak HIE ((= film 15) (set! chan-name (string-append chan-name " Kodak HIE")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 1.0 1.0 -1.0 0.0 1.0 1.0 -1.0 0.0 1.0 1.0 -1.0 0.0 )) ; Normal Contrast ((= film 16) (set! chan-name (string-append chan-name " Normal Contrast")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.43 0.33 0.30 0.43 0.33 0.30 0.43 0.33 0.30 )) ; High Contrast ((= film 17) (set! chan-name (string-append chan-name " High Contrast")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.40 0.34 0.60 0.40 0.34 0.60 0.40 0.34 0.60 )) ; Generic BW ((= film 18) (set! chan-name (string-append chan-name " Generic BW")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.24 0.68 0.08 0.24 0.68 0.08 0.24 0.68 0.08 )) ; 50-50 ((= film 19) (set! chan-name (string-append chan-name " 50-50")) (plug-in-colors-channel-mixer 1 img bw-layer TRUE 0.5 0.5 0.00 0.0 0.5 0.5 0.00 0.0 0.5 0.5 0.00 0.0 )) ) (if (equal? rename TRUE) (gimp-drawable-set-name bw-layer chan-name) () ) (if (equal? increase-local-contrast TRUE) (plug-in-unsharp-mask 1 img bw-layer 30.0 0.25 9) ()) ; Complete the undo group (gimp-image-undo-group-end img) ; Flush the display (gimp-displays-flush))) (script-fu-register "script-fu-bw-film" "/Colors/BW Film Simulation" "Black and White Film Simulation" "Serge Mankovski (sevato@mankvoski.com)" "2007, Serge Mankovski, Toronto, ON, Canada" "05.01.2007" "RGB*" SF-IMAGE "Image" 0 SF-DRAWABLE "Current Layer" 0 SF-OPTION "Film" '( "Agfa 200X" "Agfapan 25" "Agfapan 100" "Agfapan 400" "Ilford Delta 100" "Ilford Delta 400" "Ilford Delta 400 Pro & 3200" "Ilford FP4" "Ilford HP5" "Ilford Pan F" "Ilford SFX" "Ilford XP2 Super" "Kodak Tmax 100" "Kodak Tmax 400" "Kodak Tri-X" "Kodak HIE" "Normal Contrast" "High Contrast" "Generic BW" "50/50" ) SF-OPTION "Filter" '( "Select" "Yellow" "Orange" "Red" "Green" "Blue" ) SF-TOGGLE "Rename Layer?" TRUE SF-TOGGLE "New Layer?" FALSE SF-TOGGLE "Increase Local Contrast" FALSE SF-TOGGLE "Auto Levels" FALSE SF-TOGGLE "Drop Gamma 10%" FALSE SF-TOGGLE "Saturate" FALSE )