diff options
| -rw-r--r-- | script-fu/3.2/przem-add-background-under-text-v32.scm | 92 | ||||
| -rw-r--r-- | script-fu/3.2/przem-apply-sepia-v32.scm | 148 | ||||
| -rw-r--r-- | script-fu/3.2/przem-cyanotype-color-effect-multi-v32.scm | 58 | ||||
| -rw-r--r-- | script-fu/3.2/przem-ilford-expired-v32.scm | 144 | ||||
| -rw-r--r-- | script-fu/3.2/przem-kodachrome-v32.scm | 159 | ||||
| -rw-r--r-- | script-fu/3.2/przem-oldschool-photography-v32.scm | 75 | ||||
| -rw-r--r-- | script-fu/3.2/przem-prussian-blue-effect-v32.scm | 93 | ||||
| -rw-r--r-- | script-fu/3.2/przem-soft-focus-noninteractive-v32.scm | 54 | ||||
| -rw-r--r-- | script-fu/3.2/przem-sunset-effect-v32.scm | 103 | ||||
| -rw-r--r-- | script-fu/3.2/przem-teal-portrait-look-v32.scm | 166 | ||||
| -rw-r--r-- | script-fu/3.2/przem-traditional-photo-v32.scm | 69 | ||||
| -rw-r--r-- | script-fu/3.2/przem-true-cyjanotype-v32.scm | 99 | ||||
| -rw-r--r-- | script-fu/3.2/przem-wet-collodion-v32.scm | 151 | ||||
| -rw-r--r-- | script-fu/changelog.md | 3 |
14 files changed, 1414 insertions, 0 deletions
diff --git a/script-fu/3.2/przem-add-background-under-text-v32.scm b/script-fu/3.2/przem-add-background-under-text-v32.scm new file mode 100644 index 0000000..7ea23da --- /dev/null +++ b/script-fu/3.2/przem-add-background-under-text-v32.scm @@ -0,0 +1,92 @@ +; przem-add-background-under-text-v3 - Script-fu dodający podpis z tłem
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 06-02-2025
+; ver. 2.260116-1~beta for Gimp 3.0
+
+(define (przem-add-background-under-text-v3 image drawable text font font-size fg-color bg-color background-transparency opacity)
+
+ (let* (
+ (type-layer (vector-ref drawable 0))
+ (type (car (gimp-drawable-type type-layer)))
+ (image-width (car (gimp-image-get-width image)))
+ (image-height (car (gimp-image-get-height image)))
+ (text-extents (gimp-text-get-extents-font text font-size font))
+ (text-width (car text-extents))
+ (text-height (cadr text-extents))
+ (pos-x (- (- image-width text-width) 40))
+ (pos-y (- image-height text-height))
+ (bg-x-left (- pos-x 10))
+ (bg-x-right (+ text-width 10))
+ (text-layer 0)
+ (bg-layer 0)
+ )
+
+ (gimp-context-push)
+ (gimp-image-undo-group-start image)
+
+ (if (> (car (gimp-drawable-type type-layer)) 1)
+ (gimp-image-convert-rgb image)
+ )
+
+ ; Ustawienie koloru tła
+ (gimp-context-set-background bg-color)
+ (gimp-context-set-foreground fg-color)
+
+ (set! bg-layer (car (gimp-layer-new image "Background" bg-x-right text-height RGB-IMAGE 100 LAYER-MODE-NORMAL)))
+
+ (gimp-drawable-fill bg-layer FILL-BACKGROUND)
+ (gimp-layer-set-opacity bg-layer opacity)
+
+ ; Dodanie warstwy tła pod tekstem
+ (gimp-image-insert-layer image bg-layer 0 -1)
+
+ ;(gimp-layer-translate bg-layer bg-x-left pos-y)
+ ;(gimp-selection-translate image bg-layer bg-x-left pos-y)
+ (gimp-layer-set-offsets bg-layer bg-x-left pos-y)
+ (if (= background-transparency TRUE)
+ (begin
+ (gimp-drawable-fill bg-layer FILL-TRANSPARENT)
+ )
+ (begin ; else
+ )
+ )
+ (set! text-layer (car(gimp-text-font image -1 0 0 text 0 TRUE font-size font)))
+
+ ; Ustawienie pozycji tekstu
+ (gimp-layer-set-offsets text-layer pos-x pos-y)
+
+ ; Przesuń warstwę tekstową na górę stosu warstw
+ (gimp-image-raise-item-to-top image text-layer)
+
+ ; Scalanie warstw
+ (gimp-image-merge-down image text-layer CLIP-TO-IMAGE)
+
+ (gimp-image-undo-group-end image) ; Zakończ grupę operacji undo
+
+ ; Aktualizacja widoku
+ (gimp-displays-flush)
+ (gimp-context-pop)
+
+ )
+)
+
+(script-fu-register-filter "przem-add-background-under-text-v3"
+ _"Add Background Under Text"
+ _"Dodaje kolorowe tło pod tekstem z możliwością wyboru czcionki i rozmiaru."
+ "Przemysław R. Pietraszczyk"
+ "Public Domain"
+ "2025-02-06"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-STRING "Text" "Doda Elektroda"
+ SF-FONT "Font" "Monospace"
+ SF-ADJUSTMENT "Font Size" (list 50 1 1000 1 10 0 1)
+ SF-COLOR "Foreground Color" (list 100 100 100)
+ SF-COLOR "Background Color" (list 255 215 0)
+ SF-TOGGLE "Background Transparency" FALSE
+ SF-ADJUSTMENT "Transparency Value" (list 100 1 100 1 10 0 1)
+)
+
+(script-fu-menu-register "przem-add-background-under-text-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-apply-sepia-v32.scm b/script-fu/3.2/przem-apply-sepia-v32.scm new file mode 100644 index 0000000..9ba52b4 --- /dev/null +++ b/script-fu/3.2/przem-apply-sepia-v32.scm @@ -0,0 +1,148 @@ +; przem-apply-sepia-v3 - Script-fu dodający prawdziwą sepie do zdjęcia +; author: PRP +; licencja: GPL v3 +; Gdańsk - 07-02-2025 +; ver. 2.260116-1~beta for GIMP 3 +; +; 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 <https://www.gnu.org/licenses/>. +; + +(define (przem-apply-sepia-v3 image drawable value-slider-sepia shadow-sepia gradient-reverse in-sepia gradient-shape) + (let* ( + (image-width (car (gimp-image-get-width image))) + (image-height (car (gimp-image-get-height image))) + (layer (vector-ref drawable 0)) + (type (car (gimp-drawable-type layer))) + (center-x (/ image-width 2)) + (center-y (/ image-height 2)) + (radius (sqrt (+ (* center-x center-x) (* center-y center-y)))) + (the-layer 0) + ) + (gimp-context-push) + (gimp-image-undo-group-start image) + + + (if (> (car (gimp-drawable-type layer)) 1) + (gimp-image-convert-rgb image) + ) + + (if (= type RGB-IMAGE) + (gimp-drawable-desaturate layer DESATURATE-LIGHTNESS) + ) + + (gimp-selection-all image) + (set! the-layer (car (gimp-image-flatten image))) + + (if (= in-sepia TRUE) + (begin (gimp-drawable-desaturate the-layer DESATURATE-LIGHTNESS) + (gimp-drawable-brightness-contrast the-layer -0.078125 -0.15625) + (gimp-drawable-color-balance the-layer TRANSFER-SHADOWS TRUE 30 0 -30) + ) + ) + + (let ( + (sepia-layer (car (gimp-layer-new image "Sepia" image-width image-height RGB-IMAGE 100 LAYER-MODE-NORMAL))) + ) + + (gimp-context-set-foreground '(112 66 20)) ; sepia ciemniejszy + (gimp-context-set-background '(233 213 186)) ; sepia jasniejszy + ;(gimp-context-set-background '(210 180 140)) ; sepia jasniejsza + + ; Dodanie koloru sepii + (gimp-image-insert-layer image sepia-layer 0 -1) + + (gimp-context-push) + + ;(plug-in-checkerboard #:run-mode RUN-NONINTERACTIVE + ; #:image image + ; #:drawables (vector drawable) + ; #:psychobilly 0 + ; #:check-size 8) + (plug-in-checkerboard RUN-NONINTERACTIVE image (vector sepia-layer) 0 8) + + (gimp-context-pop) + + (gimp-context-push) + + ;(gimp-selection-all image) + ; tak było w v. 2.10 + ;(gimp-edit-blend sepia-layer FG-BG-RGB-MODE NORMAL-MODE GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE TRUE 3 0 TRUE 0 0 image-width image-height) + (gimp-context-set-gradient-fg-bg-rgb) + (if (= gradient-shape 1) + (begin + (gimp-context-set-gradient-reverse gradient-reverse) + (gimp-drawable-edit-gradient-fill sepia-layer + GRADIENT-LINEAR (- 100 shadow-sepia) + FALSE 1 0 + TRUE + 0 0 image-width image-height) + ) ) + (if (= gradient-shape 2) + (begin + (gimp-context-set-gradient-reverse gradient-reverse) + (gimp-drawable-edit-gradient-fill sepia-layer + GRADIENT-SHAPEBURST-DIMPLED (- 100 shadow-sepia) + FALSE 1 0 + TRUE + 0 0 center-x center-y) + ) + ) + (if (= gradient-shape 0) + (begin + (gimp-context-set-gradient-reverse gradient-reverse) + (gimp-drawable-edit-gradient-fill sepia-layer + GRADIENT-BILINEAR (- 100 shadow-sepia) + FALSE 1 0 + TRUE + (/ (+ (* 2 center-x) center-y -1) 2) 0 + 0 0) + ) + ) + + ; Zmiana krycia warstwy + (gimp-layer-set-opacity sepia-layer value-slider-sepia) + + (gimp-image-merge-down image sepia-layer CLIP-TO-IMAGE) + ) ; let + (gimp-selection-none image) + + + (gimp-image-undo-group-end image) + ;(gimp-image-undo-enable image) + + (gimp-displays-flush) + (gimp-context-pop) + +) ) + +(script-fu-register-filter "przem-apply-sepia-v3" + _"_Apply a sepia effect to the image" + _"Tworzy obraz sepii" + "Przemyslaw R. Pietraszczyk" + "GPL v3" + "2025-02-07" + "RGB* GRAY*" + SF-ONE-OR-MORE-DRAWABLE + SF-ADJUSTMENT _"Sepia intensity" '(50 0 100 1 10 0 0) ; Suwak poziomy + SF-ADJUSTMENT _"Shadow Sepia" '(30 0 100 1 10 0 0) ; Suwak poziomy + SF-TOGGLE _"Gradient reverse" FALSE + SF-TOGGLE _"Sepia" TRUE + SF-OPTION _"Shape" '("Bilinear" "Linear" "Shapeburst") + + + +) + +(script-fu-menu-register "przem-apply-sepia-v3" + "<Image>/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.2/przem-cyanotype-color-effect-multi-v32.scm b/script-fu/3.2/przem-cyanotype-color-effect-multi-v32.scm new file mode 100644 index 0000000..199bdfc --- /dev/null +++ b/script-fu/3.2/przem-cyanotype-color-effect-multi-v32.scm @@ -0,0 +1,58 @@ +; przem-cyanotype-color-effect-multi-v3 - Efekty cyjanotypi na kolor +; author: PRP +; licencja: Public Domain +; Gdańsk - 24-08-2025 +; ver. 2.250824-2 + +(define (przem-cyanotype-color-effect-multi-v3 img drawable black blue) + + (gimp-context-push) + (gimp-image-undo-group-start img) + + ; Cyjanotypia (zostaw tylko niebieski kanał) + (let* ( + (layer (vector-ref drawable 0)) + ;(type (car (gimp-drawable-type-with-alpha cyan-layer))) + (type (car (gimp-drawable-type-with-alpha (car (gimp-layer-copy (vector-ref drawable 0)))))) + + ;(cyan-layer (car (gimp-layer-copy drawable TRUE))) + (mask (car (gimp-channel-new img "Engraving Mask" (car (gimp-image-get-width img)) (car (gimp-image-get-height img)) black '(0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0)))) + ) + (if (> (car (gimp-drawable-type layer)) 1) + (gimp-image-convert-rgb img)) + + ;; Desaturacja + ;(if (= type RGBA-IMAGE) + ;(gimp-drawable-desaturate layer DESATURATE-LIGHTNESS)) + + (let* ( + (cyan-layer (car (gimp-layer-copy (vector-ref drawable 0)))) + ) + (gimp-context-set-foreground '(0 51 102)) ; Kolor błękitu pruskiego + (gimp-image-insert-layer img cyan-layer 0 -1) + (gimp-item-set-name cyan-layer "Cyanotype") + (gimp-layer-set-mode cyan-layer LAYER-MODE-SCREEN) ; Tryb mieszania: Screen + ) + ;(gimp-hue-saturation cyan-layer 0 blue 50 0) + (gimp-image-insert-channel img mask -1 0) + ) + + (gimp-image-undo-group-end img) + (gimp-displays-flush) + (gimp-context-pop)) + + +(script-fu-register-filter "przem-cyanotype-color-effect-multi-v3" + _"Add Cyanotype Color Multi..." + _"Efekty cyjanotypii na kolor" + "PRP" + "Public Domain" + "2025-08-24" + "RGB* GRAY*" + SF-ONE-OR-MORE-DRAWABLE + SF-ADJUSTMENT "Black" '(5 0 100 1 10 0 0) + SF-ADJUSTMENT "Pastel blue" '(40 30 70 1 10 1 0)) + +(script-fu-menu-register "przem-cyanotype-color-effect-multi-v3" + "<Image>/Filters/PIETRASZCZYK/") + diff --git a/script-fu/3.2/przem-ilford-expired-v32.scm b/script-fu/3.2/przem-ilford-expired-v32.scm new file mode 100644 index 0000000..f89ebdd --- /dev/null +++ b/script-fu/3.2/przem-ilford-expired-v32.scm @@ -0,0 +1,144 @@ +; przem-ilford-expired-v3 - Fotografia imitująca przeterminowany film Ilforda +; 2025-10-05 - Przemysław R. Pietraszczyk +; licence: Public Domain +; ver. 2.251006-0 +; Ten 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 (przem-ilford-expired-v3 image drawable temperature strength apply brightness contrast 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)) + (layer (vector-ref drawable 0)) + (work-layer (car (gimp-layer-copy layer TRUE))) + (work-layer-second (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) + (gimp-image-insert-layer image work-layer-second 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) + (gimp-layer-set-opacity work-layer-brightness-contrast 40)) + + (apply-quick-tint image work-layer work-layer-second image-width image-height saturation lightness hc cc) + (gimp-layer-set-opacity work-layer 40) + + (let* ((finish-layer (car (gimp-layer-copy work-layer-brightness-contrast TRUE))) + (gimp-drawable-curves-spline finish-layer HISTOGRAM-VALUE 8 #(0 0 24 22 129 138 255 255)) + (gimp-layer-set-opacity finish-layer 40) + + )) + (let* ((merged-layer (car (gimp-image-merge-visible-layers image CLIP-TO-IMAGE)))) + ;(gimp-image-merge-visible-layers image CLIP-TO-IMAGE) + (gimp-item-set-visible merged-layer TRUE)) + + + (gimp-image-undo-group-end image) + (gimp-displays-flush) + (gimp-context-pop) + ) +) + +(script-fu-register-filter "przem-ilford-expired-v3" + _"Ilford film expired" + _"Fotografia imitująca przeterminowany film Ilforda" + "Przemysław R. Pietraszczyk" + "Public Domain" + "2025-10-05" + "RGB*" + SF-ONE-OR-MORE-DRAWABLE + SF-ADJUSTMENT "Temperatura (K)" '(5550 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" '(1 -100 100 1 10 0 0) + SF-ADJUSTMENT _"Contrast" '(5 -100 100 1 10 0 0) + SF-ADJUSTMENT _"Saturation" '(5 -100 100 1 10 0 0) + SF-ADJUSTMENT _"Lightness" '(-35 -100 100 1 10 0 0) + SF-COLOR _"Highlight balance" '(211 95 0) + SF-COLOR _"Chrome balance" "black" + +) + +(script-fu-menu-register "przem-ilford-expired-v3" + "<Image>/Filters/PIETRASZCZYK/") + diff --git a/script-fu/3.2/przem-kodachrome-v32.scm b/script-fu/3.2/przem-kodachrome-v32.scm new file mode 100644 index 0000000..534d482 --- /dev/null +++ b/script-fu/3.2/przem-kodachrome-v32.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
+; Ten 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"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-oldschool-photography-v32.scm b/script-fu/3.2/przem-oldschool-photography-v32.scm new file mode 100644 index 0000000..36c3459 --- /dev/null +++ b/script-fu/3.2/przem-oldschool-photography-v32.scm @@ -0,0 +1,75 @@ +; 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" + "<Image>/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.2/przem-prussian-blue-effect-v32.scm b/script-fu/3.2/przem-prussian-blue-effect-v32.scm new file mode 100644 index 0000000..c439013 --- /dev/null +++ b/script-fu/3.2/przem-prussian-blue-effect-v32.scm @@ -0,0 +1,93 @@ +; przem-prussian-blue-effect-v3 - nieudalna próba nawiązania do efektu cyjanotypii +; author: PRP +; licencja: Public Domain +; Gdańsk - 22-6-2025 +; ver. 2.250712-0~beta + +(define (przem-prussian-blue-effect-v3 img drawable mode black value-blue brightness contrast invert) + + ;(script-fu-use-v3) + + (let* ((gradient-layer 0) + (in-layer (vector-ref drawable 0)) + (mask (car (gimp-channel-new img "Engraving Mask" (car (gimp-image-get-width img)) (car (gimp-image-get-height img)) black '(0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0)))) + ) + (gimp-context-push) + (gimp-image-undo-group-start img) + (gimp-context-set-defaults) + + (if (> (car (gimp-drawable-type in-layer)) 1) + (gimp-image-convert-rgb img)) + ; dla obrazów przestrzeni RGB i Gray, utworzenie nowej warstwy, dopiero po kowersji na rgb + (set! gradient-layer (car (gimp-layer-new img "Prussian Blue" (car (gimp-image-get-width img)) (car (gimp-image-get-height img)) RGBA-IMAGE 100 LAYER-MODE-NORMAL))) + + (gimp-image-insert-layer img gradient-layer 0 -1) + (gimp-context-set-foreground '(0 51 102)) ; Kolor błękitu pruskiego + (gimp-context-set-background '(0 0 0)) + + (gimp-drawable-brightness-contrast gradient-layer brightness contrast) + + (gimp-image-insert-channel img mask -1 0) + + (if (= mode 0) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-NORMAL) + (gimp-drawable-edit-gradient-fill gradient-layer + GRADIENT-LINEAR 1 + FALSE 1 0 + TRUE + 0 0 0 0))) + (if (= mode 1) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-SUBTRACT) + (gimp-drawable-edit-gradient-fill gradient-layer + GRADIENT-LINEAR 1 + FALSE 1 0 + TRUE + 0 0 0 0))) + (if (= mode 2) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-ADDITION) + (gimp-drawable-edit-gradient-fill gradient-layer + GRADIENT-LINEAR 1 + FALSE 1 0 + TRUE + 0 0 0 0))) + (if (= mode 3) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-DARKEN-ONLY) + (gimp-drawable-edit-gradient-fill gradient-layer + GRADIENT-LINEAR 1 + FALSE 1 0 + TRUE + 0 0 0 0))) + (if (= mode 3) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-DIFFERENCE) + (gimp-drawable-edit-gradient-fill gradient-layer + GRADIENT-LINEAR 1 + FALSE 1 0 + TRUE + 0 0 0 0))) + + ;(if (= invert TRUE) (gimp-invert gradient-layer)) + + (gimp-layer-set-opacity gradient-layer value-blue) + + (let* ((merged-layer (car (gimp-image-merge-visible-layers img CLIP-TO-IMAGE)))) + (gimp-item-set-visible merged-layer TRUE)) + + (gimp-image-undo-group-end img) + (gimp-displays-flush) + (gimp-context-pop) + ) +) + +(script-fu-register-filter "przem-prussian-blue-effect-v3" + _"Apply prussian blue effect" + _"Nakłada efekt błękitu pruskiego na zdjęcie." + "PRP" + "Public Domain" + "2025-06-22" + "RGB* GRAY*" + SF-ONE-OR-MORE-DRAWABLE + SF-OPTION "Mode" '("NORMAL" "SUBTRACT" "ADDITION" "DARKEN-ONLY" "DIFFERENCE") + SF-ADJUSTMENT "Black" '(5 0 100 1 10 0 0) + SF-ADJUSTMENT "Blue intensity" '(60 0 100 1 10 0 0) + SF-ADJUSTMENT "Brightness" '(0 -1 1 0.0001 0.0001 2 0) + SF-ADJUSTMENT "Contrast" '(0 -1 1 0.0001 0.0001 2 0) + SF-TOGGLE "Invert" FALSE +) + +(script-fu-menu-register "przem-prussian-blue-effect-v3" + "<Image>/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.2/przem-soft-focus-noninteractive-v32.scm b/script-fu/3.2/przem-soft-focus-noninteractive-v32.scm new file mode 100644 index 0000000..98d5ed0 --- /dev/null +++ b/script-fu/3.2/przem-soft-focus-noninteractive-v32.scm @@ -0,0 +1,54 @@ +; przem-soft-focus-noninteractive-v3.sh - Filtr dodający miękki focus +; 2025-06-19 - PRP +; Public Domain +; ver. 2025-06-19 + +;(define (przem-soft-focus-noninteractive-v3 basout savename) +(define (przem-soft-focus-noninteractive-v3 ask-fileglob) + + (let* ( + (thefiles (cadr (file-glob ask-fileglob 0))) + (baseout (car thefiles)) + (savename (cad thefiles)) + (image (car (gimp-file-load RUN-NONINTERACTIVE baseout savename))) + (selected-layers-array (car (gimp-image-get-selected-layers image))) + (num-selected-layers vector-length selected-layers-array) + ;(width (car (gimp-image-get-width image))) + ;(height (car (gimp-image-get-height image))) + (active-layer 0) + (blur-radius 100) + (opacity 100) + ) + + ;(gimp-message (string-append \"baseout: \" (number->string baseout))) + ;(gimp-message (string-append \"savename: \" (number->string savename))) + + (set! active-layer (vector-ref selected-layers-array (- num-selected-layers 1))) + + + ; Rozmycie Gaussa + ;(plug-in-gauss RUN-NONINTERACTIVE image active-layer blur-radius blur-radius 0) + + (gimp-drawable-merge-new-filter active-layer "gegl:gaussian-blur" RUN-NONINTERACTIVE LAYER-MODE-REPLACE 1.0 "std-dev-x" blur-radius "std-dev-y" 0.0 "filter" "auto") + + ; Zmień tryb mieszania na Overlay lub Screen + (gimp-layer-set-mode active-layer OVERLAY-MODE) + + ; Dostosuj przezroczystość + (gimp-layer-set-opacity active-layer opacity) + ;(gimp-image-merge-down image active-layer CLIP-TO-IMAGE) + + ;(let* ( + ;(merged-layer (car (gimp-image-merge-visible-layers image EXPAND-AS-NECESSARY))) + ;(merged-layer (car (gimp-image-merge-down image active-layer CLIP-TO-IMAGE))) + ;) + ;(file-tiff-save RUN-NONINTERACTIVE image active-layer savename baseout 1) ; 1 - lZW + (gimp-file-save RUN-NONINTERACTIVE image active-layer savename baseout) + + (gimp-image-undo-enable image) + ;) + + + (gimp-image-delete image) + +)) diff --git a/script-fu/3.2/przem-sunset-effect-v32.scm b/script-fu/3.2/przem-sunset-effect-v32.scm new file mode 100644 index 0000000..0dbc201 --- /dev/null +++ b/script-fu/3.2/przem-sunset-effect-v32.scm @@ -0,0 +1,103 @@ +; przem-sunset-effect-v3 - imituje efekt zachodzącego słońca +; author: PRP +; licencja: Public Domain +; Gdańsk - 01-09-2025 +; ver. 2.250901-0~beta + +(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 (przem-sunset-effect-v3 img drawable) + (gimp-image-undo-group-start img) + + ; Tworzenie warstw dla różnych efektów + (let* ( + (layer (vector-ref drawable 0)) + (sunset-layer (car (gimp-layer-copy layer TRUE))) + ;(original-visible (car (gimp-drawable-get-visible drawable))) + (original-visible (car (gimp-layer-copy layer TRUE))) + (width (car (gimp-image-get-width img))) + (height (car (gimp-image-get-height img))) + ) + + ; Dodawanie warstwy do obrazu + (gimp-image-insert-layer img sunset-layer 0 -1) + (gimp-layer-set-mode sunset-layer LAYER-MODE-MULTIPLY) + (gimp-item-set-name sunset-layer _"Sunset Effect") + + + ; Nakładanie gradientu ciepłych kolorów + (gimp-context-set-foreground '(255 100 0)) ; pomarańczowy + (gimp-context-set-background '(150 0 50)) ; różowo-czerwony + + ; Tworzenie gradientu + (gimp-layer-set-mode sunset-layer LAYER-MODE-SUBTRACT) ; + (gimp-drawable-edit-gradient-fill sunset-layer + GRADIENT-LINEAR 1 FALSE 1 0 TRUE + 0 0 width height) + + + ; cieplejsze cienie + (gimp-drawable-color-balance sunset-layer TRANSFER-SHADOWS 1 + (shadows (rval '(30 0 -20))) + (shadows (gval '(30 0 -20))) + (shadows (bval '(30 0 -20)))) + + ; cieplejsze średnie tony + (gimp-drawable-color-balance sunset-layer TRANSFER-MIDTONES 1 + (midtones (rval '(40 0 -10))) + (midtones (gval '(40 0 -10))) + (midtones (bval '(40 0 -10)))) + + ; cieplejsze światła + (gimp-drawable-color-balance sunset-layer TRANSFER-HIGHLIGHTS 1 + (highlights (rval '(20 0 -5))) + (highlights (gval '(20 0 -5))) + (highlights (bval '(20 0 -5)))) + + + ; Zwiększenie kontrastu + ;(gimp-levels sunset-layer 0 20 230 1.0 0 255) + (gimp-drawable-levels sunset-layer 0 + 0 0.20 0 TRUE + 1.0 + 0.0 1.0 TRUE) + + ; Dodanie lekkiego rozmycia dla miękkiego efektu + ;(plug-in-gauss-iir 1 img sunset-layer 5 TRUE TRUE) + (gimp-drawable-merge-new-filter sunset-layer "gegl:gaussian-blur" 1 LAYER-MODE-REPLACE 1.0 "std-dev-x" 5 "std-dev-y" 5 "filter" "auto") + + (gimp-image-undo-group-end img) + (gimp-displays-flush) + ) +) + +(script-fu-register-filter "przem-sunset-effect-v3" + _"Sunset Effect" + _"Imitacja kolorystyki zachodu słońca" + "P.R.P." + "Public Domain" + "2025-09-01" + "*" + SF-ONE-OR-MORE-DRAWABLE) + +(script-fu-menu-register "przem-sunset-effect-v3" + "<Image>/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.2/przem-teal-portrait-look-v32.scm b/script-fu/3.2/przem-teal-portrait-look-v32.scm new file mode 100644 index 0000000..1e45612 --- /dev/null +++ b/script-fu/3.2/przem-teal-portrait-look-v32.scm @@ -0,0 +1,166 @@ +; przem-teal-portrait-look-v3 - Fotografia portretowa na sterydach
+; 2026-04-06 - Przemysław R. Pietraszczyk
+; licence: GPL v3
+; ver. 2.260409-0
+; Ten 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 (saturation layer1)
+ ; drawable, HUE-Range ( Red, Yellow, Green, Cyan, Blue, Magenta, or All),
+ ; Hue Offset (-180 180), lightness (-100 100), saturation (-100 100) overlap (0 100)
+ ; Lekko przygaszona saturacja globalnie
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-ALL
+ 0.0
+ 0.0
+ -30
+ 0.0)
+
+ ;Podbicie cyjanów / zieleni (turkus szalika, chłodniejsze tło)
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-CYAN
+ 5
+ 2
+ 15
+ 0.0)
+
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-GREEN
+ 3
+ 2
+ 10
+ 0.0)
+
+ ;Delikatne ocieplenie tonów skóry (czerwienie/żółcie)
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-RED
+ -3
+ 2
+ 8
+ 0.0)
+
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-YELLOW
+ -2
+ 1
+ 6
+ 0.0))
+
+(define (teal layer2)
+ (let* (
+ ;cyan-red -5, magenta-green 0, yellow-blue +5
+ (c1 '(-5 0 5))
+ (c2 '(-3 0 3))
+ (c3 '(5 0 -3))
+ )
+ (gimp-drawable-color-balance layer2 TRANSFER-SHADOWS 1
+ (shadows (rval c1))
+ (shadows (gval c1))
+ (shadows (bval c1)))
+ (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1
+ (midtones (rval c2))
+ (midtones (gval c2))
+ (midtones (bval c2)))
+ (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1
+ (highlights (rval c3))
+ (highlights (gval c3))
+ (highlights (bval c3)))
+ ))
+
+(define (sand layer2)
+ (let* (
+ ;cyan-red (+) 30
+ ;magenta-green (+) 10
+ ;yellow-blue (+) 35
+ (c2 '(30 10 35))
+ (c3 '(20 5 25))
+ )
+ (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1
+ (midtones (rval c2))
+ (midtones (gval c2))
+ (midtones (bval c2)))
+ (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1
+ (highlights (rval c3))
+ (highlights (gval c3))
+ (highlights (bval c3)))
+ ))
+
+(define (przem-teal-portrait-look-v3 img drawable mode noise)
+
+ (let* (
+ (ref-layer (vector-ref drawable 0))
+ (work-layer (car (gimp-layer-copy ref-layer TRUE)))
+ (color-layer (car (gimp-layer-copy ref-layer TRUE)))
+ (the-layer 0)
+ (width (car (gimp-image-get-width img)))
+ (height (car (gimp-image-get-height img)))
+ (noise-layer (car (gimp-layer-new img "Noise" width height RGB-IMAGE 100 LAYER-MODE-NORMAL)))
+ (fg-color '(203 182 138))
+ ;(fg-color '(217 199 161))
+ )
+ (gimp-context-push)
+ (gimp-image-undo-group-start img)
+
+ (if (= noise TRUE) (begin
+ (gimp-image-insert-layer img noise-layer 0 -1)
+ (gimp-context-set-foreground fg-color)
+ (gimp-drawable-fill noise-layer FILL-TRANSPARENT)
+ (gimp-layer-set-mode noise-layer LAYER-MODE-MULTIPLY)))
+
+ ;(gimp-selection-all img)
+ (set! the-layer (car (gimp-image-flatten img)))
+ (gimp-layer-set-opacity the-layer 100)
+
+ (gimp-image-insert-layer img color-layer 0 -1)
+ (if (= mode 0) (begin
+ ;; Delikatne przyciemnienie i zwiększenie kontrastu
+ ;; brightness: -5, contrast: 15
+ (gimp-drawable-brightness-contrast the-layer -0.5 0.15)
+ (teal color-layer)))
+ (if (= mode 1) (begin
+ (gimp-drawable-brightness-contrast the-layer 0.10 0.5)
+ (sand color-layer)))
+ (gimp-layer-set-opacity color-layer 5)
+
+ (gimp-image-insert-layer img work-layer 0 -1)
+ (saturation work-layer)
+ (gimp-layer-set-opacity work-layer 40)
+
+ ;(let* ((merged-layer (car (gimp-image-merge-visible-layers img CLIP-TO-IMAGE))))
+ ; (gimp-item-set-visible merged-layer TRUE))
+ ;(gimp-selection-none img)
+
+ (gimp-image-undo-group-end img)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ ))
+
+(script-fu-register-filter "przem-teal-portrait-look-v3"
+ _"_Teal portrait look"
+ _"Nadaje zdjęciu miękki portretowy look: lekko przygaszone kolory, podbity turkus, ocieplona skóra, umiarkowany kontrast."
+ "Przemysław R. Pietraszczyk"
+ "GPL v3"
+ "2026-04-06"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-OPTION _"Colors Balance" '("TEAL" "SAND")
+ SF-TOGGLE _"Sand Noise" FALSE
+)
+
+(script-fu-menu-register "przem-teal-portrait-look-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-traditional-photo-v32.scm b/script-fu/3.2/przem-traditional-photo-v32.scm new file mode 100644 index 0000000..ee9b727 --- /dev/null +++ b/script-fu/3.2/przem-traditional-photo-v32.scm @@ -0,0 +1,69 @@ +; przem-traditional-photo-v3 - luźne nawiązanie do chemii tradycyjnej fototgrafii +; author: PRP +; licencja: Public Domain +; Gdańsk - 15-02-2025 +; ver. 2.250217-0~beta for GIMP 3 + + +(define (przem-traditional-photo-v3 image drawable crossing contrast-colors balance-color) + (let ( + ;(the-image (car (gimp-image-duplicate image)) image) + (the-layer 0) + (image-width (car (gimp-image-get-width image))) + (image-height (car (gimp-image-get-height image))) + ) + (gimp-image-undo-group-start image) + + ;(gimp-selection-all the-image) + + (set! the-layer (car (gimp-image-flatten image))) + + (if (= crossing TRUE) + (cross image image-width image-height)) + ;(if (= grain TRUE) + ; (gimp-noise-hurl drawable 1 0.02)) + (if (= contrast-colors TRUE) + ; Zmniejsz kontrast i dodaj kolor + (gimp-drawable-brightness-contrast the-layer -0.078125 -0.15625) + (gimp-drawable-color-balance the-layer TRANSFER-SHADOWS TRUE balance-color 0 -30)) + + ;(gimp-selection-none the-tmage) + + + (gimp-image-undo-group-end image) + (gimp-displays-flush) +) ) + +(define (cross image width height) + ; crossing photo + ;(gimp-drawable-curves-spline layer1 HISTOGRAM-VALUE (spline-chrome-it)) + (let* ((layer (gimp-layer-new image "Cross" 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 10 #(0 0 64 90 128 160 192 230 255 255)) + (gimp-drawable-curves-spline layer HISTOGRAM-RED 10 #(0 0 64 50 128 180 192 230 255 255)) + (gimp-drawable-curves-spline layer HISTOGRAM-GREEN 10 #(0 0 64 80 128 120 192 200 255 255)) + (gimp-drawable-curves-spline 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 drawable HISTOGRAM-VALUE 10 value) + )) +) + +(script-fu-register-filter "przem-traditional-photo-v3" + _"_Convert photographs to neotraditional" + _"Konwertuje na neotradycyjną fotografię" + "Przemyslaw R. Pietraszczyk" + "Public Domain" + "2025-02-15" + "RGB*" + SF-ONE-OR-MORE-DRAWABLE + SF-TOGGLE _"Crossing" FALSE + SF-TOGGLE _"Contrast and Color corection" TRUE + ;SF-ADJUSTMENT _"Contrast" (list -0.15625 -1 1 0.00010 0.00100 0 0) ; źle działa dodanie jako parametru + SF-ADJUSTMENT _"Balance Color" (list -30 -100 100 1 1 0 0) +) + +(script-fu-menu-register "przem-traditional-photo-v3" + "<Image>/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.2/przem-true-cyjanotype-v32.scm b/script-fu/3.2/przem-true-cyjanotype-v32.scm new file mode 100644 index 0000000..c67476f --- /dev/null +++ b/script-fu/3.2/przem-true-cyjanotype-v32.scm @@ -0,0 +1,99 @@ +; przem-true-cyjantype-v3 - imituje efekt prawdziwej cyjanotypii
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 14-10-2025
+; ver. 2.251104-1
+
+(define (przem-true-cyjantype-v3 image drawable black normalize value-blue invert replace tone-curve)
+ (let* ((gradient-layer 0)
+ (type-layer (vector-ref drawable 0))
+ (mask (car (gimp-channel-new image "Engraving Mask" (car (gimp-image-get-width image)) (car (gimp-image-get-height image)) black '(0.4 0.4 0.2 0.0 0.0 0.0 0.0 0.0 0.0))))
+ (layer (vector-ref drawable 0))
+ (type (car (gimp-drawable-type layer)))
+ (gradient-reverse FALSE)
+ )
+ (gimp-context-push)
+ (gimp-image-undo-group-start image)
+
+ ;; jeśli obraz jest szary to konwertuje go na RGB - tak na sztukę
+ (if (> (car (gimp-drawable-type type-layer)) 1)
+ (gimp-image-convert-rgb image))
+
+ ; Konwersja obrazu do skali szarości
+ (if (= type RGB-IMAGE)
+ (gimp-drawable-desaturate type-layer DESATURATE-LIGHTNESS)
+ )
+
+
+ ; dla obrazów przestrzeni RGB i Gray, utworzenie nowej warstwy, dopiero po kowersji na rgb
+ (set! gradient-layer (car (gimp-layer-new image "Prussian Blue" (car (gimp-image-get-width image)) (car (gimp-image-get-height image)) RGBA-IMAGE 100 LAYER-MODE-NORMAL)))
+
+ (gimp-context-set-foreground '(0 51 102)) ; Kolor błękitu pruskiego
+ (gimp-context-set-background '(0 0 0))
+
+ (gimp-image-insert-channel image mask -1 0)
+
+
+ (gimp-image-insert-layer image gradient-layer 0 -1)
+
+ (gimp-context-set-gradient-reverse gradient-reverse)
+ (gimp-drawable-edit-gradient-fill gradient-layer
+ GRADIENT-LINEAR 0
+ FALSE 1 0
+ TRUE
+ 0 0 0 0)
+ (gimp-layer-set-opacity gradient-layer value-blue)
+
+ ; w przeciwieństwie do wer. 2.10 krzywe tonalne działają inaczej
+ (if (= tone-curve TRUE)
+ (let* ((curves-layer (car (gimp-layer-copy gradient-layer TRUE)))
+ ;(gimp-drawable-curves-spline curves-layer HISTOGRAM-VALUE 10 #(0 0 32 40 128 140 220 230 255 255))
+ ; nie trzeba już deklarować długości vektora
+ (gimp-drawable-curves-spline curves-layer HISTOGRAM-VALUE #(0 0 (/ 32 255) (/ 40 255) (/ 128 255) (/ 140 255) (/ 220 255) (/ 230 255) (/ 255 255) (/ 255 255)))
+ )
+ (gimp-image-insert-layer image curves-layer 0 -1)
+ (gimp-item-set-visible curves-layer TRUE)
+ ))
+
+ (if (= invert TRUE)
+ (gimp-drawable-invert type-layer FALSE))
+
+ ;(if (= replace TRUE)
+ ; ; Wybierz tylko czarne piksele
+ ; (gimp-image-select-color image CHANNEL-OP-REPLACE drawable '(0 0 0))
+
+ ; ; Wypełnij wybrane obszary kolorem granatowym
+ ; (gimp-context-set-foreground '(0 0 128)) ; RGB dla granatowego
+ ; (gimp-edit-bucket-fill drawable BUCKET-FILL-FG LAYER-MODE-NORMAL 100 0 FALSE 0 0)
+ ; ; Odznacz selekcję
+ ; (gimp-selection-none image))
+
+ (let* ((merged-layer (car (gimp-image-merge-visible-layers image CLIP-TO-IMAGE))))
+ (gimp-item-set-visible merged-layer TRUE))
+
+
+ (gimp-image-undo-group-end image)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ )
+)
+
+(script-fu-register-filter "przem-true-cyjantype-v3"
+ _"Apply true cyjanotype effect"
+ _"Pseudo-prawdziwa próba imitacji cyjanotypii"
+ "Przemysław R. Pietraszczyk"
+ "Public Domain"
+ "2025-09-21"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-ADJUSTMENT "Black" '(5 0 100 1 10 0 0)
+ SF-TOGGLE "Normalize to 100%" TRUE
+ SF-ADJUSTMENT "Blue intensity" '(50 0 100 1 10 0 0)
+ SF-TOGGLE "Invert colors" FALSE
+ SF-TOGGLE "Replace black" FALSE
+ SF-TOGGLE "Tone Curve" TRUE
+
+)
+
+(script-fu-menu-register "przem-true-cyjantype-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-wet-collodion-v32.scm b/script-fu/3.2/przem-wet-collodion-v32.scm new file mode 100644 index 0000000..c757042 --- /dev/null +++ b/script-fu/3.2/przem-wet-collodion-v32.scm @@ -0,0 +1,151 @@ +; przem-wet-collodion-v3 - imituje efekt mokrego kolodionu +; author: PRP +; licencja: Public Domain +; Gdańsk - 24-08-2025 +; ver. 2.250824-1~beta + +(define (add-hsv-noise img drawable intensity-h intensity-s intensity-v grain) + (let* ( + (width (car (gimp-image-get-width img))) + (height (car (gimp-image-get-height img))) + (noise-layer (car (gimp-layer-new img "Noise" width height RGB-IMAGE 100 LAYER-MODE-NORMAL))) + ) + + ; Konwertuj do HSV jeśli to konieczne + ;(if (not (= (car (gimp-drawable-is-rgb drawable)) 1)) + ; (gimp-image-convert-rgb img)) + + (gimp-image-insert-layer img noise-layer 0 -1) + (gimp-drawable-fill noise-layer FILL-TRANSPARENT) + + ; Generuj szum + ;(plug-in-solid-noise RUN-NONINTERACTIVE img noise-layer 0 0 (random 1000) 0 4 4) + (let* ((noise-width (cadddr (gimp-drawable-mask-intersect noise-layer))) + (noise-height (caddr (cddr (gimp-drawable-mask-intersect noise-layer))))) + + (gimp-drawable-merge-new-filter noise-layer "gegl:noise-solid" 0 LAYER-MODE-REPLACE 1.0 "tileable" FALSE "turbulent" FALSE "seed" 0 + "detail" 1 "x-size" 4.0 "y-size" 4.0 + "width" noise-width "height"noise-height)) + + + + ; Ustaw odpowiednie intensywności dla każdego kanału HSV + (let* ( + (h-channel (car (gimp-layer-new img "H Channel" width height RGB-IMAGE 100 LAYER-MODE-HSV-HUE))) + (s-channel (car (gimp-layer-new img "S Channel" width height RGB-IMAGE 100 LAYER-MODE-HSV-SATURATION))) + (v-channel (car (gimp-layer-new img "V Channel" width height RGB-IMAGE 100 LAYER-MODE-HSV-VALUE)))) + + ; Dodaj kanały + (gimp-image-insert-layer img h-channel 0 -1) + (gimp-image-insert-layer img s-channel 0 -1) + (gimp-image-insert-layer img v-channel 0 -1) + + ; Skopiuj szum do każdego kanału + (gimp-edit-copy (vector noise-layer)) + ; czy to potrzebne ? + (gimp-edit-copy (vector drawable)) + (let* ( + (pasted (car (gimp-edit-paste h-channel TRUE))) + (num-pasted (vector-length pasted)) + (floating-sel (vector-ref pasted (- num-pasted 1))) + ) + (gimp-layer-set-offsets floating-sel 0 0) + (gimp-floating-sel-anchor floating-sel)) + + (gimp-edit-copy (vector drawable)) + (let* ( + (pasted (car (gimp-edit-paste s-channel TRUE))) + (num-pasted (vector-length pasted)) + (floating-sel (vector-ref pasted (- num-pasted 1))) + ) + (gimp-layer-set-offsets floating-sel 0 0) + (gimp-floating-sel-anchor floating-sel)) + + + (gimp-edit-copy (vector drawable)) + (let* ( + (pasted (car (gimp-edit-paste v-channel TRUE))) + (num-pasted (vector-length pasted)) + (floating-sel (vector-ref pasted (- num-pasted 1))) + ) + (gimp-layer-set-offsets floating-sel 0 0) + (gimp-floating-sel-anchor floating-sel)) + + (gimp-layer-set-opacity noise-layer 0) + + ; Ustaw przezroczystość dla każdego kanału + (gimp-layer-set-opacity h-channel intensity-h) + (gimp-layer-set-opacity s-channel intensity-s) + (gimp-layer-set-opacity v-channel intensity-v) + + ; Połącz kanały z oryginalnym obrazem + (gimp-image-merge-down img h-channel EXPAND-AS-NECESSARY) + (gimp-image-merge-down img s-channel EXPAND-AS-NECESSARY) + (gimp-image-merge-down img v-channel EXPAND-AS-NECESSARY) + + + ) + ;(gimp-image-remove-layer img noise-layer) + ) +) + + + + +(define (przem-wet-collodion-v3 image drawable mode intensity-h intensity-s intensity-v grain blur) + (let* ( + (layer (vector-ref drawable 0)) + (type (car (gimp-drawable-type-with-alpha layer))) + (width (car (gimp-image-get-width image))) + (height (car (gimp-image-get-height image))) + (mode-blur 0) + ) + (gimp-context-push) + (gimp-image-undo-group-start image) + + ;; Desaturacja + (if (= type RGBA-IMAGE) + (gimp-drawable-desaturate layer DESATURATE-LIGHTNESS)) + + ;; Dodanie winiety + (let* ((w-layer (car (gimp-layer-copy layer TRUE)))) + (gimp-image-insert-layer image w-layer 0 -1) + (gimp-drawable-merge-new-filter w-layer "gegl:gaussian-blur" 0 LAYER-MODE-REPLACE 1.0 "std-dev-x" 200 "std-dev-y" 200 "filter" "auto") + (gimp-layer-set-mode w-layer LAYER-MODE-MULTIPLY) + (gimp-layer-set-opacity w-layer 60) + ) + + ;; Dodanie szumu + (add-hsv-noise image layer intensity-h intensity-s intensity-v grain) + ;;(plug-in-noisify RUN-NONINTERACTIVE image layer FALSE grain grain grain 0) + + ;; Dodanie lekkiego rozmycia + (if (= mode 0) (begin (set! mode-blur "auto"))) + (if (= mode 1) (begin (set! mode-blur "iir"))) + (if (= mode 2) (begin (set! mode-blur "fir"))) + (gimp-drawable-merge-new-filter layer "gegl:gaussian-blur" 0 LAYER-MODE-REPLACE 1.0 "std-dev-x" blur "std-dev-y" blur "filter" mode-blur) + + (gimp-image-undo-group-end image) + (gimp-displays-flush) + (gimp-context-pop) + ) +) + +(script-fu-register-filter "przem-wet-collodion-v3" + _"Wet Collodion" + _"Imituje efekt mokrego kolodionu" + "PRP" + "Public Domain" + "2025-07-15" + "RGB* GRAY*" + SF-ONE-OR-MORE-DRAWABLE + SF-OPTION "Mode" '("AUTO" "IIR" "FIR") + SF-ADJUSTMENT "Hue Noise Intensity" '(30 0 100 1 10 0 0) + SF-ADJUSTMENT "Saturation Noise Intensity" '(20 0 100 1 10 0 0) + SF-ADJUSTMENT "Value Noise Intensity" '(15 0 100 1 10 0 0) + SF-ADJUSTMENT "Grain" '(0.2 0 1 0.1 0.1 2 0) + SF-ADJUSTMENT "Blur" '(2 0 100 1 10 0 0) +) + +(script-fu-menu-register "przem-wet-collodion-v3" + "<Image>/Filters/PIETRASZCZYK/") diff --git a/script-fu/changelog.md b/script-fu/changelog.md index 2f4a0d7..f15ef41 100644 --- a/script-fu/changelog.md +++ b/script-fu/changelog.md @@ -1,3 +1,6 @@ +# [2.260421-0] REpzytorium dla 3.2 +* Init + # [2.260409-0] przem-teal-portrait-look-v3 * Nakłada samą warstwę MULTIPLE bez gegl:noise |
