From 04aae65637bee0dd7f193a0e239f3c7ae1665436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20R=2E=20Pietraszczyk?= Date: Wed, 1 Oct 2025 16:42:53 +0200 Subject: 2.251001-0 --- script-fu/3.0/przem-kodachrome-v3.scm | 159 ++++++++++++++ script-fu/3.0/przem-oldschool-photography-v3.scm | 252 +++++++---------------- script-fu/changelog.md | 7 + 3 files changed, 241 insertions(+), 177 deletions(-) create mode 100644 script-fu/3.0/przem-kodachrome-v3.scm diff --git a/script-fu/3.0/przem-kodachrome-v3.scm b/script-fu/3.0/przem-kodachrome-v3.scm new file mode 100644 index 0000000..6a5961e --- /dev/null +++ b/script-fu/3.0/przem-kodachrome-v3.scm @@ -0,0 +1,159 @@ +; przem-kodachrome-v3 - Fotografia z okresu 20-sto lecia między wojennego +; 2025-09-25 - Przemysław R. Pietraszczyk +; licence: Public Domain +; ver. 2.250929-0 +; To script-fu wykorzystuje funkcje ze skryptu 'chrome-it.scm' +; Autorstwa Spencer Kimball + +(define (shadows val) + (/ (* 0.96 val) 2.55)) + +(define (midtones val) + (/ val 2.55)) + +(define (highlights val) + ; The result is used as "gimp-drawable-color-balance" color parameter + ; and thus must be restricted to -100.0 <= highlights <= 100.0. + (min (/ (* 1.108 val) 2.55) 100.0)) + +(define (rval col) + (car col)) + +(define (gval col) + (cadr col)) + +(define (bval col) + (caddr col)) + + + +(define (apply-quick-tint img layer1 layer2 width height saturation lightness hc cc) + + (gimp-drawable-color-balance layer1 TRANSFER-SHADOWS 1 + (shadows (rval hc)) + (shadows (gval hc)) + (shadows (bval hc))) + (gimp-drawable-color-balance layer1 TRANSFER-MIDTONES 1 + (midtones (rval hc)) + (midtones (gval hc)) + (midtones (bval hc))) + (gimp-drawable-color-balance layer1 TRANSFER-HIGHLIGHTS 1 + (highlights (rval hc)) + (highlights (gval hc)) + (highlights (bval hc))) + + (gimp-drawable-color-balance layer2 TRANSFER-SHADOWS 1 + (shadows (rval cc)) + (shadows (gval cc)) + (shadows (bval cc))) + (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1 + (midtones (rval cc)) + (midtones (gval cc)) + (midtones (bval cc))) + (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1 + (highlights (rval cc)) + (highlights (gval cc)) + (highlights (bval cc))) + + (gimp-drawable-hue-saturation layer2 HUE-RANGE-ALL + 0.0 + lightness + saturation + 0.0)) + +(define (create-highlights-curve adjustment) + (let ((curve-data (make-vector 256 'byte))) + (do ((i 0 (+ i 1))) + ((= i 256)) + (if (> i 128) + ; Światła - zastosuj regulację + (aset curve-data i (min 255 (max 0 (+ i (* (- i 128) adjustment))))) + ; Cienie - bez zmian + (aset curve-data i i) + ) + ) + curve-data + ) +) + +(define (create-shadows-curve adjustment) + (let ((curve-data (make-vector 256 'byte))) + (do ((i 0 (+ i 1))) + ((= i 256)) + (if (< i 128) + ; Cienie - zastosuj regulację + (aset curve-data i (min 255 (max 0 (+ i (* i adjustment))))) + ; Światła - bez zmian + (aset curve-data i i) + ) + ) + curve-data + ) +) + +;(define (przem-oldschool-photogrphy-v3 image drawable temperature strength tint-use +; brightness contrast highlights shadows whites blacks saturation lightness hc cc) +(define (przem-kodachrome-v3 image drawable highlights shadows saturation lightness hc cc) + + ; use v3 binding of return args from PDB + ;(script-fu-use-v3) + + (let* ( + ;(temperature-factor (/ (- temperature 6500) 1000)) + ;(red-adjust (* temperature-factor (- strength))) + ;(blue-adjust (* temperature-factor strength)) + ;(brightness-value (/ brightness 100)) + ;(contrast-value (/ contrast 100)) + (adjust-value-highlights (/ highlights 100)) + (adjust-value-shadow (/ shadows 100)) + (width (car (gimp-image-get-width image))) + (height (car (gimp-image-get-height image))) + (layer (vector-ref drawable 0)) + (work-layer (car (gimp-layer-copy layer TRUE))) + (work-layer-second (car (gimp-layer-copy layer TRUE))) + ;(work-layer-levels (car (gimp-layer-copy layer TRUE))) + ;(work-layer-brightness-contrast (car (gimp-layer-copy layer TRUE))) + (curves-layer (gimp-layer-new image "Cross" width height RGB-IMAGE 100 LAYER-MODE-NORMAL)) + (blacks 1) + (whites 0) + ) + (gimp-image-undo-group-start image) + (gimp-context-push) + + (gimp-image-insert-layer image work-layer 0 -1) + (gimp-image-insert-layer image work-layer-second 0 -1) + + (apply-quick-tint image work-layer work-layer-second width height saturation lightness hc cc) + + ; Regulacja przez poziomy + ; low imput - high input - gamma - output range + (gimp-drawable-levels work-layer 0 + blacks + whites + 1.0 1.0 1.0 0 0) + + + (gimp-image-undo-group-end image) + (gimp-displays-flush) + (gimp-context-pop) + ) +) + +(script-fu-register-filter "przem-kodachrome-v3" + _"Kodachrome" + _"Imitacja Kodachrome" + "PRP" + "Public Domain" + "2025-09-25" + "RGB*" + SF-ONE-OR-MORE-DRAWABLE + SF-ADJUSTMENT _"Highlights" '(-80 -100 100 1 10 0 0) + SF-ADJUSTMENT _"Shadow" '(30 -100 100 1 10 0 0) + SF-ADJUSTMENT _"Saturation" '(-80 -100 100 1 10 0 0) + SF-ADJUSTMENT _"Lightness" '(24 -100 100 1 10 0 0) + SF-COLOR _"Highlight balance" '(211 95 0) + SF-COLOR _"Chrome balance" "black" +) + +(script-fu-menu-register "przem-kodachrome-v3" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.0/przem-oldschool-photography-v3.scm b/script-fu/3.0/przem-oldschool-photography-v3.scm index 5585340..36c3459 100644 --- a/script-fu/3.0/przem-oldschool-photography-v3.scm +++ b/script-fu/3.0/przem-oldschool-photography-v3.scm @@ -1,177 +1,75 @@ -; przem-oldschool-photogrphy-v3.sh - Fotografia ze starej szkoły -; 2025-09-25 - Przemysław R. Pietraszczyk -; licence: Public Domain -; ver. 2.250925-2 - -(define (shadows val) - (/ (* 0.96 val) 2.55)) - -(define (midtones val) - (/ val 2.55)) - -(define (highlights val) - ; The result is used as "gimp-drawable-color-balance" color parameter - ; and thus must be restricted to -100.0 <= highlights <= 100.0. - (min (/ (* 1.108 val) 2.55) 100.0)) - -(define (rval col) - (car col)) - -(define (gval col) - (cadr col)) - -(define (bval col) - (caddr col)) - - - -(define (apply-quick-tint img layer1 layer2 width height saturation lightness hc cc) - - (gimp-drawable-color-balance layer1 TRANSFER-SHADOWS 1 - (shadows (rval hc)) - (shadows (gval hc)) - (shadows (bval hc))) - (gimp-drawable-color-balance layer1 TRANSFER-MIDTONES 1 - (midtones (rval hc)) - (midtones (gval hc)) - (midtones (bval hc))) - (gimp-drawable-color-balance layer1 TRANSFER-HIGHLIGHTS 1 - (highlights (rval hc)) - (highlights (gval hc)) - (highlights (bval hc))) - - (gimp-drawable-color-balance layer2 TRANSFER-SHADOWS 1 - (shadows (rval cc)) - (shadows (gval cc)) - (shadows (bval cc))) - (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1 - (midtones (rval cc)) - (midtones (gval cc)) - (midtones (bval cc))) - (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1 - (highlights (rval cc)) - (highlights (gval cc)) - (highlights (bval cc))) - - (gimp-drawable-hue-saturation layer2 HUE-RANGE-ALL - 0.0 - lightness - saturation - 0.0)) - -(define (create-highlights-curve adjustment) - (let ((curve-data (make-vector 256 'byte))) - (do ((i 0 (+ i 1))) - ((= i 256)) - (if (> i 128) - ; Światła - zastosuj regulację - (aset curve-data i (min 255 (max 0 (+ i (* (- i 128) adjustment))))) - ; Cienie - bez zmian - (aset curve-data i i) - ) - ) - curve-data - ) -) - -(define (create-shadows-curve adjustment) - (let ((curve-data (make-vector 256 'byte))) - (do ((i 0 (+ i 1))) - ((= i 256)) - (if (< i 128) - ; Cienie - zastosuj regulację - (aset curve-data i (min 255 (max 0 (+ i (* i adjustment))))) - ; Światła - bez zmian - (aset curve-data i i) - ) - ) - curve-data - ) -) - -(define (przem-oldschool-photogrphy-v3 image drawable temperature strength tint-use - contrast highlights shadows whites blacks saturation lightness hc cc) - - ; use v3 binding of return args from PDB - ;(script-fu-use-v3) - - (let* ( - (temperature-factor (/ (- temperature 6500) 1000)) - (red-adjust (* temperature-factor (- strength))) - (blue-adjust (* temperature-factor strength)) - (contrast-value (/ contrast 100)) - (adjust-value-highlights (/ highlights 100)) - (adjust-value-shadow (/ shadows 100)) - (width (car (gimp-image-get-width image))) - (height (car (gimp-image-get-height image))) - (layer (vector-ref drawable 0)) - (work-layer (car (gimp-layer-copy layer TRUE))) - (work-layer-second (car (gimp-layer-copy layer TRUE))) - (curves-layer (gimp-layer-new image "Cross" width height RGB-IMAGE 100 LAYER-MODE-NORMAL)) - ) - (gimp-image-undo-group-start image) - (gimp-context-push) - - (gimp-image-insert-layer image work-layer 0 -1) - (gimp-image-insert-layer image work-layer-second 0 -1) - - (if (= tint-use TRUE) - (apply-quick-tint image work-layer work-layer-second width height saturation lightness hc cc)) - (if (= tint-use FALSE) - ; Balans kolorów na podstawie temp. barwowej z kontrolą siły efektu - (gimp-drawable-color-balance work-layer TRANSFER-SHADOWS 1 red-adjust 0 blue-adjust) - (gimp-drawable-color-balance work-layer TRANSFER-MIDTONES 1 red-adjust 0 blue-adjust) - (gimp-drawable-color-balance work-layer TRANSFER-HIGHLIGHTS 1 red-adjust 0 blue-adjust)) - - (gimp-drawable-brightness-contrast work-layer 0 contrast-value) - - ; Regulacja przez poziomy - ; low imput - high input - gamma - output range - (gimp-drawable-levels work-layer 0 - blacks - whites - 1.0 1.0 1.0 0 0) - - ; CROSSOWANIE - domaga się wartości numerycznej w pierwszym argumenice - dziwne w przem-traditional-photo.scm - działa bez zarzutu - ;(set! curves-layer (gimp-image-merge-visible-layers image CLIP-TO-IMAGE)) - ;(gimp-drawable-curves-spline curves-layer HISTOGRAM-VALUE 10 #(0 0 64 90 128 160 192 230 255 255)) - ;(gimp-drawable-curves-spline curves-layer HISTOGRAM-RED 10 #(0 0 64 50 128 180 192 230 255 255)) - ;(gimp-drawable-curves-spline curves-layer HISTOGRAM-GREEN 10 #(0 0 64 80 128 120 192 200 255 255)) - ;(gimp-drawable-curves-spline curves-layer HISTOGRAM-BLUE 10 #(0 0 64 30 128 150 192 220 255 255)) - ; lub - ;(define value #(0 0 64 90 128 160 192 230 255 255)) - ;(gimp-drawable-curves-spline curves-layer HISTOGRAM-VALUE 10 value) - - - - - (gimp-image-undo-group-end image) - (gimp-displays-flush) - (gimp-context-pop) - ) -) - -(script-fu-register-filter "przem-oldschool-photogrphy-v3" - _"Oldchool photography" - _"Fotografia ze starej szkoły" - "PRP" - "Public Domain" - "2025-09-25" - "RGB*" - SF-ONE-OR-MORE-DRAWABLE - SF-ADJUSTMENT "Temperatura (K)" '(5150 1000 10000 100 1000 0 1) - SF-ADJUSTMENT "Siła efektu" '(1.0 0.1 3.0 0.1 0.5 1 0) - SF-TOGGLE "Tint use" FALSE - SF-ADJUSTMENT _"Contrast" '(-30 -100 100 1 10 0 0) - SF-ADJUSTMENT _"Highlights" '(-80 -100 100 1 10 0 0) - SF-ADJUSTMENT _"Shadow" '(30 -100 100 1 10 0 0) - SF-ADJUSTMENT _"Whites" '(0 0 1 0.1 0.1 2 0) - SF-ADJUSTMENT _"Blacks" '(1 0 1 0.1 0.1 2 0) - SF-ADJUSTMENT _"Saturation" '(-80 -100 100 1 10 0 0) - SF-ADJUSTMENT _"Lightness" '(-47 -100 100 1 10 0 0) - SF-COLOR _"Highlight balance" '(211 95 0) - SF-COLOR _"Chrome balance" "black" -) - -(script-fu-menu-register "przem-oldschool-photogrphy-v3" - "/Filters/PIETRASZCZYK/") +; przem-oldschool-photography-v3 - Fotografia z okresu 20-sto lecia między wojennego +; 2025-10-01 - Przemysław R. Pietraszczyk +; licence: Public Domain +; ver. 2.251001-0 + + + +(define (curves image width height) + ;(gimp-drawable-curves-spline layer1 HISTOGRAM-VALUE (spline-chrome-it)) + (let* ((layer (gimp-layer-new image "Curves" width height RGB-IMAGE 100 LAYER-MODE-NORMAL)) + (set! layer (gimp-image-merge-visible-layers image CLIP-TO-IMAGE)) + (gimp-drawable-curves-spline layer HISTOGRAM-VALUE 12 #(0 0 51 45 102 95 153 158 204 209 255 255)) + )) +) + + +(define (przem-oldschool-photography-v3 image drawable temperature strength apply brightness contrast) + + ; use v3 binding of return args from PDB + ;(script-fu-use-v3) + + (let* ( + (temperature-factor (/ (- temperature 6500) 1000)) + (red-adjust (* temperature-factor (- strength))) + (blue-adjust (* temperature-factor strength)) + (brightness-value (/ brightness 100)) + (contrast-value (/ contrast 100)) + (layer (vector-ref drawable 0)) + (work-layer (car (gimp-layer-copy layer TRUE))) + (work-layer-brightness-contrast (car (gimp-layer-copy layer TRUE))) + (image-width (car (gimp-image-get-width image))) + (image-height (car (gimp-image-get-height image))) + ) + + (gimp-image-undo-group-start image) + (gimp-context-push) + + (gimp-image-insert-layer image work-layer 0 -1) + (if (= apply TRUE) + (gimp-image-insert-layer image work-layer-brightness-contrast 0 -1)) + + ; Balans kolorów na podstawie temp. barwowej z kontrolą siły efektu + ; (gimp-message (string-append "Choice ")) + (gimp-drawable-color-balance work-layer TRANSFER-SHADOWS TRUE red-adjust 0 blue-adjust) + (gimp-drawable-color-balance work-layer TRANSFER-MIDTONES TRUE red-adjust 0 blue-adjust) + (gimp-drawable-color-balance work-layer TRANSFER-HIGHLIGHTS TRUE red-adjust 0 blue-adjust) + (if (= apply TRUE) + (gimp-drawable-brightness-contrast work-layer-brightness-contrast brightness-value contrast-value)) + + (curves image image-width image-height) + + (gimp-image-undo-group-end image) + (gimp-displays-flush) + (gimp-context-pop) + ) +) + +(script-fu-register-filter "przem-oldschool-photography-v3" + _"Oldschool Photography" + _"Nawiązanie do fotografii 20-sto lecia międzywojennego" + "PRP" + "Public Domain" + "2025-10-01" + "RGB*" + SF-ONE-OR-MORE-DRAWABLE + SF-ADJUSTMENT "Temperatura (K)" '(5150 1000 10000 100 1000 0 1) + SF-ADJUSTMENT "Siła efektu" '(1.0 0.1 3.0 0.1 0.5 1 0) + SF-TOGGLE _"Apply Brightness and Contrast" FALSE + SF-ADJUSTMENT _"Brightness" '(0 -100 100 1 10 0 0) + SF-ADJUSTMENT _"Contrast" '(-30 -100 100 1 10 0 0) + +) + +(script-fu-menu-register "przem-oldschool-photography-v3" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/changelog.md b/script-fu/changelog.md index 2cac737..5db137e 100644 --- a/script-fu/changelog.md +++ b/script-fu/changelog.md @@ -1,3 +1,10 @@ + +# [2.251001-0] przem-oldschool-photography-v3.scm +* Kolorowa fotografia przedwojenna, uzyskiwana za pomocą zmiany temeratury barwowej + +# [2.250929-0] przem-kodachrome-v3.scm +* Ostateczne zmiany w script-fu dotyczącego imitacji Kodachrome, zmiana nazwy. + # [2.250926-0] przem-oldschool-photography-v3.scm * Zdjęcia Chromatc dla wersji 3.0 -- cgit v1.2.3