;;; ;;; COLOGRAM.SCM -*-scheme-*- This File is written by Friedemann Wolpert 2010 ;;; You can contact the Author using the following eMail: Friedemann@MedienKunstOnline.De ;;; Project Entry for "Mach Flott den Schrott 2", Heise Magazin (define (script-fu-cologram image layer rows-per-sec dpi-setting img-resize want-sharpen want-grid want-adjframe frameforecolor framerearcolor adjframedist adjframewidth want-cutframe cutframedist cutframewidth ;anchor-top anchor-down anchor-left anchor-right format ) (let* ( (width (car (gimp-image-width image))) (height (car (gimp-image-height image))) (mode 0) (l 0) (y 0) (y2) (layerinfo (gimp-image-get-layers image)); needed for amount of Layers (num-layers (car layerinfo)) (layers (cadr layerinfo)) (width2 (* width num-layers)) ; ; width2 = width * num-layers reversed (new-image) (new-layer) (floating-layer) (want-alpha) (grid-layer) (dpi-value) (Target-Width) (Target-Height) (scaleval) ) ; --- create new image (set! new-image (car (gimp-image-new width height mode))) ; --- start undo Group Cologram (new-image) (gimp-image-undo-group-start new-image); No History for generated Image (gimp-image-undo-group-start image); No History for generated Image ; -- Set Default Colors (gimp-context-set-default-colors) ; reset Brush Sizes !!! ; --- Set Resolution to selected DPI Setting; place up (cond (( equal? dpi-setting 0 ) (set! dpi-value 300) ) (( equal? dpi-setting 1 ) (set! dpi-value 150) ) (( equal? dpi-setting 2 ) (set! dpi-value 180) ) (( equal? dpi-setting 3 ) (set! dpi-value 300) ) (( equal? dpi-setting 4 ) (set! dpi-value 360) ) (( equal? dpi-setting 5 ) (set! dpi-value 600) ) (( equal? dpi-setting 6 ) (set! dpi-value 720) ) ) ; img-resize - if value not 0 then resize image depending on DPI settings !!! reset width and height afterwards ; ; "0 = No Changes (Default)" "1 = US-LETTER" "2 = US-LEGAL" "3 = Din A3" "4 = Din A4" "5 = Din A5" "6 = Din A6") ; (cond ; make sure to subtract the frame and cutmark width !!! - you can eval portrait or landscape depending on width > height or vv. (( equal? img-resize 1 ) ; 1 == US-LETTER 8.5 x 11 inch differ between (portrait & landscape) (cond ( (< width height) ; width < height -> Height > Width -> Portrait ;Set Target Size (set! Target-Width (* 8.5 dpi-value)) ; US LETTER Portrait (set! Target-Height (* 11 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Height height)) ; We want a proportional Image (set! Target-Width (* width scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; US LETTER (cond ( (> width height) ; Landscape ;Set Target Size (set! Target-Height (* 8.5 dpi-value)) ; US LETTER Landscape (set! Target-Width (* 11 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) ) ) (cond (( equal? want-cutframe TRUE ) (cond ; still fits Image ? ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; US LETTER SQUARE (cond((= width height) ; Square Format - use Landscape for Better Resolution ;Set Target Size (set! Target-Height (* 8.5 dpi-value)) ; US LETTER Landscape (set! Target-Width (* 11 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) ) ) ; ------------------------------ ; Valid for all Target Sizes !!! ; ------------------------------ ; reset width / height value !!! (set! width Target-Width) (set! height Target-Height) ; Scale Source Image to desired Size (gimp-image-scale-full image Target-Width Target-Height 3) ; 2 cubic 3 lancosz ; -- Resize the Image accordingly adjframewidth 8.5 x 11" x dpi-value (gimp-image-scale new-image Target-Width Target-Height) ; Scale Source Images Up ! (set! width2 (* width num-layers)) (cond ; -- Sharpen all Layers (( equal? want-sharpen TRUE ) (set! l 0); l=0; (while (< l num-layers); want-sharpen (plug-in-unsharp-mask 0 image (aref layers l) 1 10 10) (set! l (+ l 1)) ; l = l + 1 ) ) ) ; want sharpen ) ; end US LETTER ; -- START US LEGAL (( equal? img-resize 2 ) ; 2 == US-LEGAL 8.5 x 14 inch differ between (portrait/landscape/square) (cond ( (< width height) ; width < height -> Height > Width -> Portrait ;Set Target Size (set! Target-Width (* 8.5 dpi-value)) ; US LEGAL Portrait (set! Target-Height (* 14 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Height height)) ; We want a proportional Image (set! Target-Width (* width scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; US LEGAL (cond ( (> width height) ; Landscape ;Set Target Size (set! Target-Width (* 14 dpi-value)) ; Scale Factor (set! Target-Height (* 8.5 dpi-value)) ; US LEGAL Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) ) ) (cond (( equal? want-cutframe TRUE ) (cond ; still fits Image ? ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; US LEGAL SQUARE (cond((= width height) ; Square Format - use Landscape for Better Resolution ;Set Target Size (set! Target-Width (* 14 dpi-value)) ; Scale Factor (set! Target-Height (* 8.5 dpi-value)) ; US LEGAL Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) ) ) ; ------------------------------ ; Valid for all Target Sizes !!! ; ------------------------------ ; reset width / height value !!! (set! width Target-Width) (set! height Target-Height) ; Scale Source Image to desired Size (gimp-image-scale-full image Target-Width Target-Height 3) ; 2 cubic 3 lancosz ; -- Resize the Image accordingly adjframewidth 8.5 x 11" x dpi-value (gimp-image-scale new-image Target-Width Target-Height) ; Scale Source Images Up ! (set! width2 (* width num-layers)) (cond ; -- Sharpen all Layers (( equal? want-sharpen TRUE ) (set! l 0); l=0; (while (< l num-layers); want-sharpen (plug-in-unsharp-mask 0 image (aref layers l) 1 10 10) (set! l (+ l 1)) ; l = l + 1 ) ) ) ; want sharpen ) ; end US LEGAL ; --- Start Din A3 !!! (( equal? img-resize 3 ) ; 3 == Din-A3 11.69 x 16.54 inch differ between (portrait/landscape/square) (cond ( (< width height) ; width < height -> Height > Width -> Portrait ;Set Target Size (set! Target-Width (* 11.69 dpi-value)) ; Din A3 Portrait (set! Target-Height (* 16.54 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Height height)) ; We want a proportional Image (set! Target-Width (* width scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A3 (cond ( (> width height) ; Landscape ;Set Target Size (set! Target-Width (* 16.54 dpi-value)) ; Scale Factor (set! Target-Height (* 11.69 dpi-value)) ; Din A3 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) ) ) (cond (( equal? want-cutframe TRUE ) (cond ; still fits Image ? ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A3 SQUARE (cond((= width height) ; Square Format - use Landscape for Better Resolution ;Set Target Size (set! Target-Width (* 16.54 dpi-value)) ; Scale Factor (set! Target-Height (* 11.69 dpi-value)) ; Din A3 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) ) ) ; ------------------------------ ; Valid for all Target Sizes !!! ; ------------------------------ ; reset width / height value !!! (set! width Target-Width) (set! height Target-Height) ; Scale Source Image to desired Size (gimp-image-scale-full image Target-Width Target-Height 3) ; 2 cubic 3 lancosz ; -- Resize the Image accordingly adjframewidth 8.5 x 11" x dpi-value (gimp-image-scale new-image Target-Width Target-Height) ; Scale Source Images Up ! (set! width2 (* width num-layers)) (cond ; -- Sharpen all Layers (( equal? want-sharpen TRUE ) (set! l 0); l=0; (while (< l num-layers); want-sharpen (plug-in-unsharp-mask 0 image (aref layers l) 1 10 10) (set! l (+ l 1)) ; l = l + 1 ) ) ) ; want sharpen ) ; end Din A3 ; --- Start Din A4 !!! (( equal? img-resize 4 ) ; 4 == Din-A4 8.27 x 11.69 inch differ between (portrait/landscape/square) (cond ( (< width height) ; width < height -> Height > Width -> Portrait ;Set Target Size (set! Target-Width (* 8.27 dpi-value)) ; Din A4 Portrait (set! Target-Height (* 11.69 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Height height)) ; We want a proportional Image (set! Target-Width (* width scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A4 (cond ( (> width height) ; Landscape ;Set Target Size (set! Target-Width (* 11.69 dpi-value)) ; Scale Factor (set! Target-Height (* 8.27 dpi-value)) ; Din A4 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) ) ) (cond (( equal? want-cutframe TRUE ) (cond ; still fits Image ? ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A4 SQUARE (cond((= width height) ; Square Format - use Landscape for Better Resolution ;Set Target Size (set! Target-Width (* 11.69 dpi-value)) ; Scale Factor (set! Target-Height (* 8.27 dpi-value)) ; Din A4 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) ) ) ; ------------------------------ ; Valid for all Target Sizes !!! ; ------------------------------ ; reset width / height value !!! (set! width Target-Width) (set! height Target-Height) ; Scale Source Image to desired Size (gimp-image-scale-full image Target-Width Target-Height 3) ; 2 cubic 3 lancosz ; -- Resize the Image accordingly adjframewidth 8.5 x 11" x dpi-value (gimp-image-scale new-image Target-Width Target-Height) ; Scale Source Images Up ! (set! width2 (* width num-layers)) (cond ; -- Sharpen all Layers (( equal? want-sharpen TRUE ) (set! l 0); l=0; (while (< l num-layers); want-sharpen (plug-in-unsharp-mask 0 image (aref layers l) 1 10 10) (set! l (+ l 1)) ; l = l + 1 ) ) ) ; want sharpen ) ; end Din A4 ; --- Start Din A5 !!! (( equal? img-resize 5 ) ; 5 == Din-A5 5.83 x 8.27 inch differ between (portrait/landscape/square) (cond ( (< width height) ; width < height -> Height > Width -> Portrait ;Set Target Size (set! Target-Width (* 5.83 dpi-value)) ; Din A5 Portrait (set! Target-Height (* 8.27 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Height height)) ; We want a proportional Image (set! Target-Width (* width scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A5 (cond ( (> width height) ; Landscape ;Set Target Size (set! Target-Width (* 8.27 dpi-value)) ; Scale Factor (set! Target-Height (* 5.83 dpi-value)) ; Din A5 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) ) ) (cond (( equal? want-cutframe TRUE ) (cond ; still fits Image ? ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A5 SQUARE (cond((= width height) ; Square Format - use Landscape for Better Resolution ;Set Target Size (set! Target-Width (* 8.27 dpi-value)) ; Scale Factor (set! Target-Height (* 5.83 dpi-value)) ; Din A5 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) ) ) ; ------------------------------ ; Valid for all Target Sizes !!! ; ------------------------------ ; reset width / height value !!! (set! width Target-Width) (set! height Target-Height) ; Scale Source Image to desired Size (gimp-image-scale-full image Target-Width Target-Height 3) ; 2 cubic 3 lancosz ; -- Resize the Image accordingly adjframewidth 8.5 x 11" x dpi-value (gimp-image-scale new-image Target-Width Target-Height) ; Scale Source Images Up ! (set! width2 (* width num-layers)) (cond ; -- Sharpen all Layers (( equal? want-sharpen TRUE ) (set! l 0); l=0; (while (< l num-layers); want-sharpen (plug-in-unsharp-mask 0 image (aref layers l) 1 10 10) (set! l (+ l 1)) ; l = l + 1 ) ) ) ; want sharpen ) ; end Din A5 ; --- Start Din A6 !!! (( equal? img-resize 6 ) ; 6 == Din-A6 4.13 x 5.83 inch differ between (portrait/landscape/square) (cond ( (< width height) ; width < height -> Height > Width -> Portrait ;Set Target Size (set! Target-Width (* 4.13 dpi-value)) ; Din A6 Portrait (set! Target-Height (* 5.83 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Height height)) ; We want a proportional Image (set! Target-Width (* width scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A6 (cond ( (> width height) ; Landscape ;Set Target Size (set! Target-Width (* 5.83 dpi-value)) ; Scale Factor (set! Target-Height (* 4.13 dpi-value)) ; Din A6 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) ) ) (cond (( equal? want-cutframe TRUE ) (cond ; still fits Image ? ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A6 SQUARE (cond((= width height) ; Square Format - use Landscape for Better Resolution ;Set Target Size (set! Target-Width (* 5.83 dpi-value)) ; Scale Factor (set! Target-Height (* 4.13 dpi-value)) ; Din A6 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) ) ) ; ------------------------------ ; Valid for all Target Sizes !!! ; ------------------------------ ; reset width / height value !!! (set! width Target-Width) (set! height Target-Height) ; Scale Source Image to desired Size (gimp-image-scale-full image Target-Width Target-Height 3) ; 2 cubic 3 lancosz ; -- Resize the Image accordingly adjframewidth 8.5 x 11" x dpi-value (gimp-image-scale new-image Target-Width Target-Height) ; Scale Source Images Up ! (set! width2 (* width num-layers)) (cond ; -- Sharpen all Layers (( equal? want-sharpen TRUE ) (set! l 0); l=0; (while (< l num-layers); want-sharpen (plug-in-unsharp-mask 0 image (aref layers l) 1 10 10) (set! l (+ l 1)) ; l = l + 1 ) ) ) ; want sharpen ) ; end Din A6 ; --- Start Din A7 !!! (( equal? img-resize 7 ) ; 7 == Din-A7 2.91 x 4.13 inch differ between (portrait/landscape/square) (cond ( (< width height) ; width < height -> Height > Width -> Portrait ;Set Target Size (set! Target-Width (* 2.91 dpi-value)) ; Din A7 Portrait (set! Target-Height (* 4.13 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Height height)) ; We want a proportional Image (set! Target-Width (* width scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A7 (cond ( (> width height) ; Landscape ;Set Target Size (set! Target-Width (* 4.13 dpi-value)) ; Scale Factor (set! Target-Height (* 2.91 dpi-value)) ; Din A7 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) ) ) (cond (( equal? want-cutframe TRUE ) (cond ; still fits Image ? ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A7 SQUARE (cond((= width height) ; Square Format - use Landscape for Better Resolution ;Set Target Size (set! Target-Width (* 4.13 dpi-value)) ; Scale Factor (set! Target-Height (* 2.91 dpi-value)) ; Din A7 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) ) ) ; ------------------------------ ; Valid for all Target Sizes !!! ; ------------------------------ ; reset width / height value !!! (set! width Target-Width) (set! height Target-Height) ; Scale Source Image to desired Size (gimp-image-scale-full image Target-Width Target-Height 3) ; 2 cubic 3 lancosz ; -- Resize the Image accordingly adjframewidth 8.5 x 11" x dpi-value (gimp-image-scale new-image Target-Width Target-Height) ; Scale Source Images Up ! (set! width2 (* width num-layers)) (cond ; -- Sharpen all Layers (( equal? want-sharpen TRUE ) (set! l 0); l=0; (while (< l num-layers); want-sharpen (plug-in-unsharp-mask 0 image (aref layers l) 1 10 10) (set! l (+ l 1)) ; l = l + 1 ) ) ) ; want sharpen ) ; end Din A7 ; --- Start Din A8 !!! (( equal? img-resize 8 ) ; 8 == Din-A8 2.05 x 2.91 inch differ between (portrait/landscape/square) (cond ( (< width height) ; width < height -> Height > Width -> Portrait ;Set Target Size (set! Target-Width (* 2.05 dpi-value)) ; Din A8 Portrait (set! Target-Height (* 2.91 dpi-value)) ; Scale Factor ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Height height)) ; We want a proportional Image (set! Target-Width (* width scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A8 (cond ( (> width height) ; Landscape ;Set Target Size (set! Target-Width (* 2.91 dpi-value)) ; Scale Factor (set! Target-Height (* 2.05 dpi-value)) ; Din A8 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) ) ) (cond (( equal? want-cutframe TRUE ) (cond ; still fits Image ? ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) )) ; Din A8 SQUARE (cond((= width height) ; Square Format - use Landscape for Better Resolution ;Set Target Size (set! Target-Width (* 2.91 dpi-value)) ; Scale Factor (set! Target-Height (* 2.05 dpi-value)) ; Din A8 Landscape ; check if want cutframe & want adjframe (cond (( equal? want-adjframe TRUE ) (cond ; still fits Image ? ((< (* (+ adjframewidth adjframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ adjframewidth adjframedist) 2)) ) )) (set! scaleval (/ Target-Width width)) ; We want a proportional Image (set! Target-Height (* height scaleval)) )) (cond (( equal? want-cutframe TRUE ) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Height ) (set! Target-Height (- Target-Height (* (+ cutframewidth cutframedist) 2)) ) )) (cond ((< (* (+ cutframewidth cutframedist) 2) Target-Width ) (set! Target-Width (- Target-Width (* (+ cutframewidth cutframedist) 2)) ) )) )) ) ) ; ------------------------------ ; Valid for all Target Sizes !!! ; ------------------------------ ; reset width / height value !!! (set! width Target-Width) (set! height Target-Height) ; Scale Source Image to desired Size (gimp-image-scale-full image Target-Width Target-Height 3) ; 2 cubic 3 lancosz ; -- Resize the Image accordingly adjframewidth 8.5 x 11" x dpi-value (gimp-image-scale new-image Target-Width Target-Height) ; Scale Source Images Up ! (set! width2 (* width num-layers)) (cond ; -- Sharpen all Layers (( equal? want-sharpen TRUE ) (set! l 0); l=0; (while (< l num-layers); want-sharpen (plug-in-unsharp-mask 0 image (aref layers l) 1 10 10) (set! l (+ l 1)) ; l = l + 1 ) ) ) ; want sharpen ) ; end Din A8 ) ; end Target Size ; Clear Selection (gimp-selection-none image) (gimp-display-new new-image) ; show it! (set! new-layer (car (gimp-layer-new new-image width height RGB-IMAGE "Cologram" 100 NORMAL-MODE))) (gimp-image-add-layer new-image new-layer 0) (gimp-image-set-active-layer new-image new-layer) ; (set! want-alpha (car (gimp-drawable-has-alpha layer))) ; only works if no alpha layer ... ; (if (= want-alpha TRUE) ; bugged ; (gimp-layer-add-alpha new-layer image ) ; remove the alpha channel ... add white as background ... ; (gimp-layer-flatten layer) RGBA->RGB removes Alpha from a Layer ; iterate all layers & flatten (if required at all !!!) ; ) ; -- Set Palette for adjustment Layer (gimp-edit-fill new-layer BG-IMAGE-FILL) ; else transparent Alpha Channel gets Black instead of translucent ; --- copy each section, could be improved - minor bugs (does use same row for all slices) (set! y 0) ; y = 0; (set! y2 0) ; y2 = 0; ;(while (< y (- width num-layers)) ; while y < (width + 1) - Bug Here !!! One Step too far (while (< y width) ;(gimp-rect-select image y 0 rows-per-sec height 2 0 0); one slice rows-per-sec in Width - Height in Height (set! l 0); l=0; (while (< l num-layers); while l < 5 (eg 5 Layers), iterate through all layers (gimp-rect-select image y 0 rows-per-sec height 2 0 0); one slice rows-per-sec in Width - Height in Height (gimp-edit-copy (aref layers l)) ; copy current layer l (set! floating-layer (car (gimp-edit-paste new-layer FALSE))) ; ; Now, move scale and anchor it (gimp-floating-sel-to-layer floating-layer) (gimp-layer-set-offsets floating-layer y2 0) (set! y2 (+ y2 rows-per-sec)) ; y2 = y2 + rows-per-sec (set! l (+ l 1)) ; l = l + 1 (set! y (+ y rows-per-sec)) ) ;(set! y (+ y (* num-layers rows-per-sec))) ; y = y + ( num-layers * rows-per-sec ) ) (gimp-drawable-update new-layer 0 0 width height) (set! new-layer (car(gimp-image-merge-visible-layers new-image 1))) ; reset to new Value ! ; Drawing the Barrier Grid - This Section depends on your Gimp Version and may need Adjustment (cond (( equal? want-grid TRUE ) ; -- Initiate Grid Layer (set! grid-layer (car(gimp-layer-new new-image (car (gimp-image-width new-image)) (car (gimp-image-height new-image)) 1 "Barrier Grid" 100 NORMAL))) (gimp-image-add-layer new-image grid-layer 0) (gimp-edit-clear grid-layer) ; -- Set Default Colors (gimp-context-set-default-colors) ; --- Draw Grid Layer ' uses plug-in-grid for huge performance boost !!! ; Start Offset For Alignment of Grid and Image ||-> Todo (set! y (* rows-per-sec ( / (- num-layers 1 ) 2 ))) ; y = rows-per-sec * (numlayers-1)/2 ; Attention: There is a Bug in plug-in-grid you may need to adopt the Script depending on your Gimp Version ;(plug-in-grid run-mode image drawable hwidth hspace hoffset hcolor hopacity vwidth vspace voffset vcolor vopacity iwidth ispace ioffset icolor iopacity) ;For Gimp >= 2.6.7 use this Line (plug-in-grid 1 new-image grid-layer 0 1 0 '(0 0 0) 0 (- (* rows-per-sec num-layers) rows-per-sec) (* rows-per-sec num-layers) 0 '(0 0 0) 255 0 0 0 '(0 0 0) 255) ; non-interactive=1 ;For Gimp < 2.6.7 use this Line ; (plug-in-grid 1 new-image grid-layer 0 (* rows-per-sec num-layers) 0 '(0 0 0) 0 (- (* rows-per-sec num-layers) rows-per-sec) 1 y '(0 0 0) 255 0 0 0 '(0 0 0) 255) ; non-interactive=1 ; --- No Selection (gimp-selection-none new-image) (gimp-selection-none image) ; --- Flip Grid Layer (gimp-flip grid-layer 1) ; Vertical Flip for perfect alignment ! ) ) ; Want an adjustment Frame (cond (( equal? want-adjframe TRUE ) ; Draw a Rect Frame with required Sizes ! ; -- Resize the Image accordingly adjframedist adjframewidth (gimp-image-resize new-image (+ width (* adjframedist 2)) (+ height (* adjframedist 2)) adjframedist adjframedist); resize & center ; Ebene auf Bildgrösse (gimp-layer-resize-to-image-size new-layer) ; Cologram Layer (cond (( equal? want-grid TRUE ) (gimp-layer-resize-to-image-size grid-layer) ; )) ; reset width / height value !!! (set! width (car (gimp-image-width new-image))) (set! height (car (gimp-image-height new-image))) (gimp-selection-all new-image) ; -- Resize the Image accordingly adjframewidth (gimp-image-resize new-image (+ width (* adjframewidth 2))(+ height (* adjframewidth 2)) adjframewidth adjframewidth ) ; Rahmen auf Bildgrösse (gimp-layer-resize-to-image-size new-layer) ; Cologram Layer (cond (( equal? want-grid TRUE ) (gimp-layer-resize-to-image-size grid-layer) )) ; Now invert selection and fill it ! (gimp-selection-invert new-image) ; -- Set Palette for adjustment Layer (gimp-context-set-foreground frameforecolor) (gimp-context-set-background framerearcolor) (gimp-edit-fill new-layer BG-IMAGE-FILL) (cond (( equal? want-grid TRUE ) (gimp-edit-fill grid-layer FG-IMAGE-FILL) )) ; Reset Palette (gimp-context-set-default-colors) ; reset width / height value !!! (set! width (car (gimp-image-width new-image))) (set! height (car (gimp-image-height new-image))) ) ) (gimp-selection-none new-image) ; ---- Want a Cut Frame (No Need for Color here) (cond (( equal? want-cutframe TRUE ) ; Draw a Rect Frame with required Sizes ! ; -- Resize the Image accordingly cutframedist cutframewidth (gimp-image-resize new-image (+ width (* cutframedist 2)) (+ height (* cutframedist 2)) cutframedist cutframedist); resize & center ; Ebene auf Bildgrösse (gimp-layer-resize-to-image-size new-layer) ; Cologram Layer (cond (( equal? want-grid TRUE ) (gimp-layer-resize-to-image-size grid-layer) )) ; reset width / height value !!! (set! width (car (gimp-image-width new-image))) (set! height (car (gimp-image-height new-image))) (gimp-selection-all new-image) ; -- Resize the Image accordingly cutframewidth (gimp-image-resize new-image (+ width (* cutframewidth 2))(+ height (* cutframewidth 2)) cutframewidth cutframewidth) ; Rahmen auf Bildgrösse (gimp-layer-resize-to-image-size new-layer) ; Cologram Layer (cond (( equal? want-grid TRUE ) (gimp-layer-resize-to-image-size grid-layer) )) ; Now invert selection and fill it ! (gimp-selection-invert new-image) (gimp-edit-fill new-layer FG-IMAGE-FILL) (cond (( equal? want-grid TRUE ) (gimp-edit-fill grid-layer FG-IMAGE-FILL) )) ; Reset Palette (gimp-context-set-default-colors) ; reset width / height value !!! (set! width (car (gimp-image-width new-image))) (set! height (car (gimp-image-height new-image))) (gimp-selection-none new-image) ) ) ; --- Draw Register Marks depending on chosen Size (and DPI Values) ;(cond ; (( equal? format 0) ; Default size ;(gimp-image-set-resolution new-image 150 150) ; Canon Printer 600, Epson 720 dpi ;(gimp-message "Default Format") ; ) ; (( equal? format 1) ; Want Din-A4 size ;(gimp-image-set-resolution new-image 180 180) ; Canon Printer 600, Epson 720 dpi ;(gimp-message "Want Din-A4") ;(gimp-image-resize ... ) ; ) ;) ; --- Draw Register Marks ;(cond ; (( equal? anchor-top TRUE ) ;(gimp-image-set-resolution new-image 150 150) ; Canon Printer 600, Epson 720 dpi ;(gimp-message "Anchor Points wanted") ; ) ;) ;(cond ; (( equal? anchor-down TRUE ) ;(gimp-image-set-resolution new-image 150 150) ; Canon Printer 600, Epson 720 dpi ;(gimp-message "Anchor Points wanted") ; ) ; (( equal? anchor-down FALSE ) ;(gimp-image-set-resolution new-image 180 180) ; Canon Printer 600, Epson 720 dpi ;(gimp-message "No Anchor Points wanted") ; ) ;) ;(cond ; (( equal? anchor-left TRUE ) ;(gimp-image-set-resolution new-image 150 150) ; Canon Printer 600, Epson 720 dpi ;(gimp-message "Do sumthin ...") ; (gimp-ellipse-select new-image 5 5 5 5 REPLACE 1 0 0) ; (gimp-context-set-foreground '(255 0 0)); ; (gimp-edit-stroke grid-layer) ;(gimp-rect-select new-image 0 5 5 1 REPLACE 0 0) ; Create a Cross ;(gimp-rect-select new-image 5 0 1 5 0 0 0) ;(gimp-context-set-foreground '(0 0 0)); ;(gimp-edit-stroke grid-layer) ; (gimp-context-set-foreground '(0 255 0)); ; (gimp-edit-stroke new-layer) ; ) ;) ;(cond ; (( equal? anchor-right TRUE ) ;(gimp-image-set-resolution new-image 150 150) ; Canon Printer 600, Epson 720 dpi ; (gimp-context-set-foreground '(255 0 0)); ; (gimp-ellipse-select new-image (- width 10) 5 5 5 REPLACE 1 0 0) ; (gimp-edit-stroke grid-layer) ; (gimp-context-set-foreground '(0 255 0)); ; (gimp-edit-stroke new-layer) ; ) ;) ; --- No Selection (gimp-selection-none new-image) (gimp-selection-none image) ; -- Set Default Colors (gimp-context-set-default-colors) ; --- Flush Displays (gimp-displays-flush) (cond ( (equal? want-grid TRUE) (gimp-drawable-set-visible grid-layer FALSE) (gimp-drawable-set-visible grid-layer TRUE) ) ) ; --- Set Resolution to selected DPI Setting; place up (gimp-image-set-resolution new-image dpi-value dpi-value) ; Canon Printer 600, Epson 720 dpi ; --- cleanup (gimp-image-undo-group-end new-image) (gimp-image-undo-group-end image) ) ) (script-fu-register "script-fu-cologram" "DIY Barrier 3D Photos..." "Erstellt 3D Photos. Ein Freeware Gimp Plugin für Heise." "Friedemann Wolpert" "2011, Friedemann" "6th August 2011" "*" SF-IMAGE _"The Image" 0 SF-DRAWABLE _"The Layer" 0 SF-ADJUSTMENT _"Verwendete Pixel pro Abschnitt" '(1 1 100 1 10 0 0) SF-OPTION "Drucker Auflösung" '("300 DPI Canon" "150 DPI Canon" "180 DPI Epson" "300 DPI Canon" "360 DPI Epson" "600 DPI Canon" "720 DPI Epson") SF-OPTION "Auflösung des Zielbildes anpassen" '("Keine Änderung (Default)" "US-Letter" "US-Legal" "Din A3" "Din A4" "Din A5" "Din A6" "Din A7" "Din A8") SF-TOGGLE "Quellbild schärfen (Verbessert die Qualität bei Änderung der Zielauflösung)" FALSE SF-TOGGLE "Barrierebild generieren (Wichtig)" TRUE ; Resize Image when Frames are desired SF-TOGGLE "Rahmen für die Ausrichtung der Bilder generieren" TRUE SF-COLOR "Ausrichtungsrahmenfarbe Barrierebild" '(0 0 0) SF-COLOR "Ausrichtungsrahmenfarbe auf dem 3D Bild" '(0 0 0) SF-ADJUSTMENT "Abstand des Ausrichtungsrahmens zum Bild (px)" '(50 0 1000 1 10 0 0) ; Resize Image ! SF-ADJUSTMENT "Breite des Ausrichtungsrahmens (px)" '(1 1 20 1 10 0 0) ; Passerrahmen SF-TOGGLE "Schnittmarke generieren" TRUE SF-ADJUSTMENT "Abstand Schnittmarke zum Bild (px)" '(50 0 1000 1 10 0 0) ; Resize Image ! SF-ADJUSTMENT "Breite der Schnittmarke (px)" '(2 1 20 1 10 0 0) ; Schnittmarke ;SF-TOGGLE "Print Top Register Mark" FALSE ; Passerkreuz ;SF-TOGGLE "Print Down Register Mark" FALSE ;SF-TOGGLE "Print Left Register Mark" FALSE ;SF-TOGGLE "Print Right Register Mark" FALSE ;SF-OPTION "Resize Image for Register Mark" '("Default" "Din-A5" "Din-A4" "Din-A3" ) ) (script-fu-menu-register "script-fu-cologram" "/3D Parallax Barrier") ; Friedemann Wolpert 2011, Heise Mach Flott den Schrott 2 Project Entry