From e8d42b19bc5892de59924d108687bb09069a251a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20R=2E=20Pietraszczyk?= Date: Sun, 29 Jun 2025 20:54:25 +0200 Subject: Init --- script-fu/2.10/przem-add-background-under-text.scm | 83 ++++++++ script-fu/2.10/przem-apply-cents-effect.scm | 47 +++++ script-fu/2.10/przem-apply-sepia.scm | 91 +++++++++ script-fu/2.10/przem-apply-waves-effect.scm | 96 +++++++++ .../2.10/przem-cyanotype-gum-effect-multi.scm | 55 +++++ script-fu/2.10/przem-cyanotype-gum-effect.scm | 33 +++ script-fu/2.10/przem-expired-negative.scm | 222 +++++++++++++++++++++ script-fu/2.10/przem-prussian-blue-effect.scm | 57 ++++++ script-fu/2.10/przem-soft-focus-noninteractive.scm | 32 +++ script-fu/2.10/przem-soft-focus.scm | 49 +++++ script-fu/2.10/przem-traditional-photo.scm | 52 +++++ .../3.0/przem-add-background-under-text-v3.scm | 96 +++++++++ script-fu/3.0/przem-apply-sepia-v3.scm | 154 ++++++++++++++ .../3.0/przem-soft-focus-noninteractive-v3.scm | 54 +++++ script-fu/3.0/przem-traditional-photo-v3.scm | 69 +++++++ script-fu/changelog.md | 129 ++++++++++++ 16 files changed, 1319 insertions(+) create mode 100644 script-fu/2.10/przem-add-background-under-text.scm create mode 100644 script-fu/2.10/przem-apply-cents-effect.scm create mode 100644 script-fu/2.10/przem-apply-sepia.scm create mode 100644 script-fu/2.10/przem-apply-waves-effect.scm create mode 100644 script-fu/2.10/przem-cyanotype-gum-effect-multi.scm create mode 100644 script-fu/2.10/przem-cyanotype-gum-effect.scm create mode 100644 script-fu/2.10/przem-expired-negative.scm create mode 100644 script-fu/2.10/przem-prussian-blue-effect.scm create mode 100644 script-fu/2.10/przem-soft-focus-noninteractive.scm create mode 100644 script-fu/2.10/przem-soft-focus.scm create mode 100644 script-fu/2.10/przem-traditional-photo.scm create mode 100644 script-fu/3.0/przem-add-background-under-text-v3.scm create mode 100644 script-fu/3.0/przem-apply-sepia-v3.scm create mode 100644 script-fu/3.0/przem-soft-focus-noninteractive-v3.scm create mode 100644 script-fu/3.0/przem-traditional-photo-v3.scm create mode 100644 script-fu/changelog.md (limited to 'script-fu') diff --git a/script-fu/2.10/przem-add-background-under-text.scm b/script-fu/2.10/przem-add-background-under-text.scm new file mode 100644 index 0000000..9b9c977 --- /dev/null +++ b/script-fu/2.10/przem-add-background-under-text.scm @@ -0,0 +1,83 @@ +; przem-add-background-under-text - Script-fu dodający podpis z tłem +; author: PRP +; licencja: Public Domain +; Gdańsk - 06-02-2025 +; ver. 1.250209-1 + +(define (przem-add-background-under-text image drawable text font font-size color background-transparency opacity) + + (gimp-image-undo-group-start image) + + (let* ( + (image-width (car (gimp-image-width image))) + (image-height (car (gimp-image-height image))) + (text-extents (gimp-text-get-extents-fontname text font-size 0 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 (car (gimp-text-fontname image -1 0 0 text 0 TRUE font-size 0 font))) + (bg-layer (car (gimp-layer-new image bg-x-right text-height RGBA-IMAGE "Background" 100 NORMAL-MODE))) + (is-nocolorful (car (gimp-drawable-is-gray drawable))) ; czy obraz jest w odcieniach szarości + ) + + ; Ustawienie koloru tła + (gimp-context-set-background color) + (gimp-drawable-fill bg-layer BACKGROUND-FILL) + (gimp-layer-set-opacity bg-layer opacity) + + ; jeśli obraz jest szary to konwertuje go na RGB - tak na sztukę + (if (= is-nocolorful TRUE) + (gimp-image-convert-rgb image) + ) + + ; Dodanie warstwy tła pod tekstem + (gimp-image-insert-layer image bg-layer 0 -1) + ;(gimp-image-add-layer image new-layer 0) + (gimp-layer-translate bg-layer bg-x-left pos-y) + + (if (= background-transparency TRUE) + (begin + (gimp-drawable-fill bg-layer TRANSPARENT-FILL) + ) + (begin ; else + ) + ) + + ; 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) + + ; Aktualizacja widoku + (gimp-displays-flush) + + (gimp-image-undo-group-end image) ; Zakończ grupę operacji undo + ) +) + +(script-fu-register "przem-add-background-under-text" + _"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-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-STRING "Text" "Doda Elektroda" + SF-FONT "Font" "Sans-serif" + SF-ADJUSTMENT "Font Size" '(50 1 1000 1 10 0 1) + SF-COLOR "Background Color" '(255 215 0) + SF-TOGGLE "Background Transparency" FALSE + SF-ADJUSTMENT "Transparency Value" '(100 1 100 1 10 0 1) +) + +(script-fu-menu-register "przem-add-background-under-text" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/2.10/przem-apply-cents-effect.scm b/script-fu/2.10/przem-apply-cents-effect.scm new file mode 100644 index 0000000..e8c9958 --- /dev/null +++ b/script-fu/2.10/przem-apply-cents-effect.scm @@ -0,0 +1,47 @@ +; apply-cents-effect - Script-fu dodający efekt cętek +; author: PRP +; licencja: Public Domain +; Gdańsk - 26-02-2025 +; ver. 1.250223-0 + +(define (przem-apply-cents-effect image drawable bright azimuth elevation depth polish) + + (let* ( + (width (car (gimp-image-width image))) + (height (car (gimp-image-height image))) + (bump-map (car (gimp-image-get-active-layer image))) + ) + (gimp-image-undo-group-start image) + + (plug-in-solid-noise RUN-NONINTERACTIVE image drawable 0 0 0 1 5 5) + (plug-in-bump-map RUN-NONINTERACTIVE image drawable bump-map azimuth elevation depth 0 0 0 0 TRUE FALSE 0) + (if (= polish 0) (gimp-curves-spline drawable 0 18 #(0 255 30 0 65 255 95 0 125 255 160 0 190 255 222 0 255 255)));max + (if (= polish 1) (gimp-curves-spline drawable 0 14 #(0 0 31 193 79 30 127 255 191 94 222 255 255 185)));med + (if (= polish 2) (gimp-curves-spline drawable 0 14 #(0 0 32 160 94 63 127 223 190 161 222 255 255 255)));soft + (gimp-brightness-contrast drawable bright bright) + (gimp-selection-invert image) + + (gimp-image-undo-group-end image) + (gimp-displays-flush) + ) +) + + +(script-fu-register "przem-apply-cents-effect" + _"Apply a cents effect to the image." + _"Dodaje efekt cętek do zdjęcia" + "Przenmysław R. Pietraszczyk" + "Public Domain" + "2025-02-23" + "RGB*, GRAY*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-ADJUSTMENT "Bright" '(50 0 100 1 10 0 0) + SF-ADJUSTMENT "Azimuth" '(360 0 360 1 10 0 0) + SF-ADJUSTMENT "Elevation" '(45 0 90 1 10 0 0) + SF-ADJUSTMENT "Depth" '(5 1 50 1 10 0 0) + SF-OPTION "Polish" '("MAX" "MED" "MIN") + +) + +(script-fu-menu-register "przem-apply-cents-effect" "/Filters/PIETRASZCZYK/") diff --git a/script-fu/2.10/przem-apply-sepia.scm b/script-fu/2.10/przem-apply-sepia.scm new file mode 100644 index 0000000..449d627 --- /dev/null +++ b/script-fu/2.10/przem-apply-sepia.scm @@ -0,0 +1,91 @@ +; przem-apply-sepia - Script-fu dodający prawdziwą sepie do zdjęcia +; author: PRP +; licencja: Public Domain +; Gdańsk - 07-02-2025 +; ver. 1.250213-0 + +(define (przem-apply-sepia image drawable value-slider-sepia gradient-reverse gradient-shape) + + (let* ( + (image-width (car (gimp-image-width image))) + (image-height (car (gimp-image-height image))) + (center-x (/ image-width 2)) + (center-y (* image-height 0.5)) ; either is OK + (sepia-layer (car (gimp-layer-new image image-width image-height RGBA-IMAGE "Sepia Layer" 100 NORMAL-MODE))) + (is-nocolorful (car (gimp-drawable-is-gray drawable))) ; czy obraz jest w odcieniach szarości + (radius (sqrt (+ (* center-x center-x) (* center-y center-y)))) + ) + + (gimp-image-undo-group-start image) + + ; jeśli obraz jest szary to konwertuje go na RGB - tak na sztukę + (if (= is-nocolorful TRUE) + (gimp-image-convert-rgb image) + ) + + ; Konwersja obrazu do skali szarości + (gimp-desaturate drawable) + + ; Dodanie koloru sepii + (gimp-context-set-foreground '(112 66 20)) ; Kolor sepii + (gimp-context-set-background '(233 213 186)) ; Kolor sepii + + + (gimp-image-insert-layer image sepia-layer 0 -1) + + (gimp-selection-all image) + + (if (= gradient-reverse TRUE) + (begin + + (if (= gradient-shape TRUE) + (begin + (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) + ) + (begin + (gimp-edit-blend sepia-layer CUSTOM-MODE NORMAL-MODE + GRADIENT-RADIAL 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + center-x center-y radius 0) + ) ) ) + (begin + + (if (= gradient-shape TRUE) + (begin + (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) + ) + (begin + (gimp-edit-blend sepia-layer CUSTOM-MODE NORMAL-MODE + GRADIENT-RADIAL 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + center-x center-y radius 0) + ) ) ) ) + + + ; ) + ; Zmiana krycia warstwy + (gimp-layer-set-opacity sepia-layer value-slider-sepia) + + (gimp-image-merge-down image sepia-layer CLIP-TO-IMAGE) + + (gimp-image-undo-group-end image) + + (gimp-displays-flush) +) ) + +(script-fu-register "przem-apply-sepia" + _"Apply a sepia effect to the image" + _"Tworzy obraz sepii" + "Przemyslaw R. Pietraszczyk" + "Public Domain" + "2025-02-07" + "RGB* GRAY*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-ADJUSTMENT "Sepia intensity" '(50 0 100 1 10 0 0) + SF-TOGGLE "Gradient reverse" FALSE + SF-TOGGLE "Shape" TRUE +) + +(script-fu-menu-register "przem-apply-sepia" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/2.10/przem-apply-waves-effect.scm b/script-fu/2.10/przem-apply-waves-effect.scm new file mode 100644 index 0000000..5ded293 --- /dev/null +++ b/script-fu/2.10/przem-apply-waves-effect.scm @@ -0,0 +1,96 @@ +; apply-waves-effect - Script-fu dodający efekt falowania +; author: PRP +; licencja: Public Domain +; Gdańsk - 25-02-2025 +; ver. 1.250225-2 + +(define (przem-apply-waves-effect image drawable amplitude frequency phase) + (let* ( +         (width (car (gimp-image-width image))) +         (height (car (gimp-image-height image))) +         (new-image (car (gimp-image-duplicate image))) +         (new-drawable (car (gimp-image-get-active-drawable new-image))) + (resize-y 0) + (resize-x 0) + (y 0) + (x 0) + (counter 0)) + (gimp-selection-none new-image) + +    (gimp-context-push) +    (gimp-context-set-defaults) + + ; symulacja + (while (< y height) +      (while (< x width) + (set! resize-x (+ x (* amplitude (sin (+ (* frequency x) phase))))) +          (set! resize-y (+ y (* amplitude (cos (+ (* frequency y) phase))))) + (set! x (+ x 1)) + (set! counter (+ counter 1)) + ) + (set! x 0) + (set! y (+ y 1)) + ) + + + (gimp-image-scale new-image resize-x resize-y) +    (set! new-drawable (car (gimp-image-get-active-drawable new-image))) + + (set! x 0) + (set! y 0) + +    ; Przejdź przez każdy piksel obrazu +    (while (< y height) +      (while (< x width) +        (let* ( +          (new-x (+ x (* amplitude (sin (+ (* frequency x) phase))))) +          (new-y (+ y (* amplitude (cos (+ (* frequency y) phase))))) +          (color (car (gimp-image-pick-color image drawable x y FALSE FALSE 1))) + ) + (gimp-context-set-foreground color) + ;(gimp-brushes-refresh) + (gimp-context-set-brush "Circle (01)") + (gimp-context-set-brush-size 1) + (gimp-context-set-brush-angle 0.0) + (gimp-context-set-brush-hardness 1.0) + (gimp-context-set-opacity 100.0) +    (gimp-pencil new-drawable 2 (vector new-x new-y)) ; Narysuj punkt + + (gimp-message "Wait...") + ;(display "pixel: ") (displayln pixel) + ) + (set! x (+ x 1)) + ) + (set! x 0) + (set! y (+ y 1)) + ) + ;(gimp-image-set-resolution image newdpi newdpi) + + +    (gimp-context-pop) +    (gimp-display-new new-image) + + (gimp-selection-none new-image) + + (gimp-displays-flush) + +) ) + +(define displayln (lambda (obj) (display obj) (display "\n"))) + + +(script-fu-register "przem-apply-waves-effect" + _"Apply a waves effect to the image." + _"Dodaje efekt fali do zdjęcia" + "Przenmysław R. Pietraszczyk" + "Public Domain" + "2025-02-25" + "RGB*, GRAY*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-VALUE "Amplitude" "10" +  SF-VALUE "Frequency" "0.1" +  SF-VALUE "Phase" "0" +) + +(script-fu-menu-register "przem-apply-waves-effect" "/Filters/PIETRASZCZYK") diff --git a/script-fu/2.10/przem-cyanotype-gum-effect-multi.scm b/script-fu/2.10/przem-cyanotype-gum-effect-multi.scm new file mode 100644 index 0000000..9603815 --- /dev/null +++ b/script-fu/2.10/przem-cyanotype-gum-effect-multi.scm @@ -0,0 +1,55 @@ +; przem-cyanotype-gum-effect-multi - Efekty cyjanotypii i gumy dwuchromianowej +; author: PRP +; licencja: Public Domain +; Gdańsk - 18-06-2025 +; ver. 2.250618-1 + +(define (przem-cyanotype-gum-effect-multi img drawable blue grain) + ;(gimp-image-undo-group-start img) + + (gimp-context-push) + (gimp-image-undo-group-start img) + + ; Cyjanotypia (zostaw tylko niebieski kanał) + (let* ( + (cyan-layer (car (gimp-layer-copy drawable TRUE)))) + (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 + (plug-in-colors-channel-mixer TRUE img cyan-layer TRUE 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0) + ;(gimp-invert cyan-layer) + (gimp-hue-saturation cyan-layer 0 blue 50 0) + ) + + + + ; Guma dwuchromianowa (sepia + ziarno) + (let* ( + (gum-layer (car (gimp-layer-copy drawable TRUE)))) + (gimp-image-insert-layer img gum-layer 0 -1) + (gimp-item-set-name gum-layer "Gum Bichromate") + (gimp-layer-set-mode gum-layer LAYER-MODE-OVERLAY) ; Tryb mieszania: Overlay + (gimp-hue-saturation gum-layer 0 40 25 0) ; Brązowy odcień + (plug-in-noisify TRUE img gum-layer FALSE grain grain grain 0) ; Lekkie ziarno 0.1 + ) + + (gimp-image-undo-group-end img) + (gimp-displays-flush) + (gimp-context-pop)) + + +(script-fu-register "przem-cyanotype-gum-effect-multi" + _"Add Cyanotype+Gum Multi..." + _"Efekty cyjanotypii i gumy dwuchromianowej" + "PRP" + "Public Domain" + "2025-06-18" + "RGB*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-ADJUSTMENT "Pastel blue" '(40 30 70 1 10 1 0) + SF-ADJUSTMENT "Grain" '(0.1 0 1 0.1 0.1 2 0)) + +(script-fu-menu-register "przem-cyanotype-gum-effect-multi" + "/Filters/PIETRASZCZYK/") + diff --git a/script-fu/2.10/przem-cyanotype-gum-effect.scm b/script-fu/2.10/przem-cyanotype-gum-effect.scm new file mode 100644 index 0000000..551c89f --- /dev/null +++ b/script-fu/2.10/przem-cyanotype-gum-effect.scm @@ -0,0 +1,33 @@ +; przem-cyanotype-gum-effect - Tworzy efekt zastosowania cyjanotypi wraz z gumą dwuchromianową +; author: PRP +; licencja: Public Domain +; Gdańsk - 18-09-2025 +; ver. 2.250618-0 + +(define (przem-cyanotype-gum-effect img drawable) + (gimp-context-push) + (gimp-image-undo-group-start img) + + ; Cyjanotypia + (plug-in-colors-channel-mixer TRUE img drawable TRUE 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0) ; Tylko niebieski kanał + + ; Efekt gumy + (gimp-colorize drawable 40 25 0) ; Brązowe barwienie + + (gimp-image-undo-group-end img) + (gimp-displays-flush) + (gimp-context-pop)) + + +(script-fu-register "przem-cyanotype-gum-effect" + _"Add Cyanotype+Gum..." + _"Łączy efekt cyjanotypii i gumy dwuchromianowej" + "PRP" + "Public Domain" + "2025-06-18" + "RGB*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0) + +(script-fu-menu-register "przem-cyanotype-gum-effect" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/2.10/przem-expired-negative.scm b/script-fu/2.10/przem-expired-negative.scm new file mode 100644 index 0000000..c939db2 --- /dev/null +++ b/script-fu/2.10/przem-expired-negative.scm @@ -0,0 +1,222 @@ +; przem-expired-negative - luźne nawiązanie do przeterminowanego negatywu ORWO +; author: PRP +; licencja: Public Domain +; Gdańsk - 22-05-2025 +; ver. 2.250610-5~beta + +(define (is-portrait? image) + (let* ((width (car (gimp-image-width image))) + (height (car (gimp-image-height image))) + (ratio (/ (min width height) (max width height)))) + + ; Jeśli stosunek boków jest większy niż 0.7 i wysokość > szerokości + ;(and (> ratio 0.7) (> height width)) + (> height width) + ) +) + + +(define (portrait image fog-layer-right fog-layer-left position-right width cut-left density color) + + ; PORTRET + ; prawa strona + ; Dodaj nową warstwę dla mgły + (gimp-image-insert-layer image fog-layer-right 0 -1) + + (gimp-context-set-background color) + (gimp-context-set-foreground '(#x0 #x0 #x0)) ; mgła jest biała/szara + + ; Wypełnij warstwę przezroczystością + (gimp-drawable-fill fog-layer-right FILL-TRANSPARENT) + + ; Utwórz gradient od przezroczystego do białego (mgła) + (gimp-edit-blend fog-layer-right BLEND-FG-TRANSPARENT LAYER-MODE-NORMAL + GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + position-right 0 ; X1 = 3/4 szerokości + width 0) ; X2 = pełna szerokość + + ; Lekko rozmyj mgłę dla naturalnego efektu + (plug-in-gauss 1 image fog-layer-right density density 1) ; dostosuj wartość rozmycia (8) + + ; Ustaw maskę warstwy, aby stopniowo zanikała + (let ((mask (car (gimp-layer-create-mask fog-layer-right ADD-MASK-WHITE)))) + (gimp-layer-add-mask fog-layer-right mask) + + (gimp-context-set-background color) + (gimp-context-set-foreground '(#x0 #x0 #x0)) ; mgła jest biała/szara + (gimp-edit-blend mask BLEND-FG-TRANSPARENT LAYER-MODE-NORMAL + GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + position-right 0 + width 0)) + + + + + ;lewa strona + ; Dodaj nową warstwę dla mgły + (gimp-image-insert-layer image fog-layer-left 0 -1) + (gimp-context-set-background color) + (gimp-context-set-foreground '(#x0 #x0 #x0)) ; mgła jest biała/szara + + ; Wypełnij warstwę przezroczystością + (gimp-drawable-fill fog-layer-left FILL-TRANSPARENT) + + ; Utwórz gradient od przezroczystego do białego (mgła) + (gimp-edit-blend fog-layer-left BLEND-FG-TRANSPARENT LAYER-MODE-NORMAL + GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + cut-left 0 0 0) + + ; Lekko rozmyj mgłę dla naturalnego efektu + (plug-in-gauss 1 image fog-layer-left density density 1) ; dostosuj wartość rozmycia (8) + + ; Ustaw maskę warstwy, aby stopniowo zanikała + (let ((mask (car (gimp-layer-create-mask fog-layer-left ADD-MASK-WHITE)))) + (gimp-layer-add-mask fog-layer-left mask) + (gimp-context-set-background color) + (gimp-context-set-foreground '(#x0 #x0 #x0)) ; mgła jest biała/szara + + (gimp-edit-blend mask BLEND-FG-TRANSPARENT LAYER-MODE-NORMAL + GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + cut-left 0 0 0)) + + +) + +(define (landscape image fog-layer-up fog-layer-bottom width height cut-up size density color) + + ; KRAJOBRAZ + ; dól + ; Dodaj nową warstwę dla mgły + (gimp-image-insert-layer image fog-layer-up 0 -1) + + (gimp-context-set-background color) + (gimp-context-set-foreground '(#x0 #x0 #x0)) ; mgła jest biała/szara + + ; Wypełnij warstwę przezroczystością + (gimp-drawable-fill fog-layer-up FILL-TRANSPARENT) + + ; Utwórz gradient od przezroczystego do białego (mgła) + (gimp-edit-blend fog-layer-up BLEND-FG-TRANSPARENT LAYER-MODE-NORMAL + GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + 0 (- height cut-up) 0 height) ; size + + ; Lekko rozmyj mgłę dla naturalnego efektu + (plug-in-gauss 1 image fog-layer-up density density 1) ; dostosuj wartość rozmycia (8) + + ; Ustaw maskę warstwy, aby stopniowo zanikała + (let ((mask (car (gimp-layer-create-mask fog-layer-bottom ADD-MASK-WHITE)))) + (gimp-layer-add-mask fog-layer-up mask) + + (gimp-context-set-background color) + (gimp-context-set-foreground '(#x0 #x0 #x0)) ; mgła jest biała/szara + (gimp-edit-blend mask BLEND-FG-TRANSPARENT LAYER-MODE-NORMAL + GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + 0 (- height cut-up) 0 height)) ; size + + + + ; gora + ; Dodaj nową warstwę dla mgły + (gimp-image-insert-layer image fog-layer-bottom 0 -1) + + (gimp-context-set-background color) + (gimp-context-set-foreground '(#x0 #x0 #x0)) ; mgła jest biała/szara + + ; Wypełnij warstwę przezroczystością + (gimp-drawable-fill fog-layer-bottom FILL-TRANSPARENT) + + ; Utwórz gradient od przezroczystego do białego (mgła) + (gimp-edit-blend fog-layer-bottom BLEND-FG-TRANSPARENT LAYER-MODE-NORMAL + GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + 0 cut-up + 0 0) + + ; Lekko rozmyj mgłę dla naturalnego efektu + (plug-in-gauss 1 image fog-layer-bottom density density 1) ; dostosuj wartość rozmycia (8) + + ; Ustaw maskę warstwy, aby stopniowo zanikała + (let ((mask (car (gimp-layer-create-mask fog-layer-bottom ADD-MASK-WHITE)))) + (gimp-layer-add-mask fog-layer-bottom mask) + + (gimp-context-set-background color) + (gimp-context-set-foreground '(#x0 #x0 #x0)) ; mgła jest biała/szara + (gimp-edit-blend mask BLEND-FG-TRANSPARENT LAYER-MODE-NORMAL + GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE + FALSE 0 0 TRUE + 0 cut-up + 0 0)) + + + +) + + +(define (przem-expired-negative image drawable size density color) + (let* ( + (width (car (gimp-image-width image))) + (height (car (gimp-image-height image))) + (frame-size-left size) + (frame-size-right (- 1 size)) + (frame-size-up size) + (position-right (* width frame-size-right)) + (position-left (* width frame-size-left)) + + (position-up (* height frame-size-up)) + (num-size-up (/ height position-up)) + (cut-up (- height (* position-up (- num-size-up 1)))) + (is-colorful (car (gimp-drawable-is-rgb drawable))) ; czy obraz jest kolorowy + + (num-size-left (/ width position-left)) + (cut-left (- width (* position-left (- num-size-left 1)))) ; 3 + (fog-layer-right (car (gimp-layer-new image width height GRAY-IMAGE "Fog-Right-Up" 100 LAYER-MODE-NORMAL))) + (fog-layer-left (car (gimp-layer-new image width height GRAY-IMAGE "Fog-Left-Bottom" 100 LAYER-MODE-NORMAL))) + ) + + (gimp-image-undo-group-start image) + + (if (= is-colorful TRUE) + (gimp-image-convert-grayscale image) + ) + + (if (is-portrait? image) + (begin + ;(gimp-message (string-append "width: " (number->string width))) + ;(gimp-message (string-append "position-right: " (number->string position-right))) + ;(gimp-message (string-append "cut-left: " (number->string cut-left))) + (portrait image fog-layer-right fog-layer-left position-right width cut-left density color)) + (begin + ;(gimp-message (string-append "height: " (number->string height))) + ;(gimp-message (string-append "size: " (number->string (* size 1000)))) + ;(gimp-message (string-append "cut-up: " (number->string cut-up))) + (landscape image fog-layer-right fog-layer-left width height cut-up (* size 1000) density color)) + + ) + (gimp-image-undo-group-end image) ;) + + (gimp-displays-flush) + ) +) + +(script-fu-register "przem-expired-negative" + _"Convert photographs to photograph from expired negative" + _"Konwertuje na fotografie z przeterminowanego negatywu" + "Przemyslaw R. Pietraszczyk" + "Public Domain" + "2025-05-22" + "RGB* GRAY*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-ADJUSTMENT "Size" '(0.20 0.05 0.50 0.01 0.01 2 0) + SF-ADJUSTMENT "Density" '(8 8 128 8 8 1 0) + SF-COLOR "Color" '(#x74 #x73 #x73) ;color variable +) + +(script-fu-menu-register "przem-expired-negative" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/2.10/przem-prussian-blue-effect.scm b/script-fu/2.10/przem-prussian-blue-effect.scm new file mode 100644 index 0000000..d469399 --- /dev/null +++ b/script-fu/2.10/przem-prussian-blue-effect.scm @@ -0,0 +1,57 @@ +; przem-prussian-blue-effect - nieudalna próba nawiązania do efektu cyjanotypii +; author: PRP +; licencja: Public Domain +; Gdańsk - 22-6-2025 +; ver. 2.250622-0~beta + +(define (przem-prussian-blue-effect img drawable mode invert value-blue) + + (let* ((gradient-layer (car (gimp-layer-new img (car (gimp-image-width img)) (car (gimp-image-height img)) RGBA-IMAGE "Prussian Blue" 50 NORMAL-MODE))) + (is-nocolorful (car (gimp-drawable-is-gray drawable)))) + + (gimp-image-undo-group-start img) + (gimp-context-push) + + ; jeśli obraz jest szary to konwertuje go na RGB - tak na sztukę + (if (= is-nocolorful TRUE) + (gimp-image-convert-rgb img) + ) + + (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)) + (if (= mode 0) (gimp-layer-set-mode gradient-layer OVERLAY-MODE)) + (if (= mode 1) (gimp-layer-set-mode gradient-layer SCREEN-MODE)) + + (plug-in-colors-channel-mixer TRUE img gradient-layer TRUE 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0) + + ;(gimp-edit-blend gradient-layer FG-BG-RGB-MODE NORMAL-MODE GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE FALSE 0 0 TRUE (car (gimp-image-width img)) (car (gimp-image-height img)) 0 0) + (gimp-edit-blend gradient-layer FG-BG-RGB-MODE NORMAL-MODE GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE FALSE 0 0 TRUE 0 0 0 0) + + (if (= invert TRUE) (gimp-invert gradient-layer)) + + (gimp-layer-set-opacity gradient-layer value-blue) + (gimp-image-merge-down img gradient-layer CLIP-TO-IMAGE) + + (gimp-image-undo-group-end img) + (gimp-displays-flush) + (gimp-context-pop)) +) + +(script-fu-register "przem-prussian-blue-effect" + _"Apply prussian blue effect" + _"Nakłada efekt błękitu pruskiego na zdjęcie." + "PRP" + "Public Domain" + "2025-06-22" + "RGB*, GRAY*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-OPTION "Mode" '("OVERLAY MODE" "SCREEN MODE") + SF-TOGGLE "Invert Color" FALSE + SF-ADJUSTMENT "Blue intensity" '(50 0 100 1 10 0 0) + +) + +(script-fu-menu-register "przem-prussian-blue-effect" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/2.10/przem-soft-focus-noninteractive.scm b/script-fu/2.10/przem-soft-focus-noninteractive.scm new file mode 100644 index 0000000..f833adb --- /dev/null +++ b/script-fu/2.10/przem-soft-focus-noninteractive.scm @@ -0,0 +1,32 @@ +; przem-soft-focus-noninteractive - Tworzy efekt miękkiego focusa +; author: PRP +; licencja: Public Domain +; Gdańsk - 15-09-2025 +; ver. 2.250615-0 + +(define (przem-soft-focus-noninteractive filename file-name blur-radius opacity) + + (let* ( + (img (car (gimp-file-load RUN-NONINTERACTIVE filename file-name))) + (drawable (car (gimp-image-get-active-layer img))) + (soft-layer (car (gimp-layer-copy drawable FALSE))) + ) + + (gimp-image-insert-layer img soft-layer 0 -1) + (gimp-item-set-name soft-layer "Soft Focus") + + ; Rozmycie Gaussa + (plug-in-gauss 1 img soft-layer blur-radius blur-radius 0) + + ; Zmień tryb mieszania na Overlay lub Screen + (gimp-layer-set-mode soft-layer OVERLAY-MODE) + + ; Dostosuj przezroczystość + (gimp-layer-set-opacity soft-layer opacity) + ;(gimp-image-merge-down img soft-layer CLIP-TO-IMAGE) + + (gimp-file-save RUN-NONINTERACTIVE img drawable file-name filename) + (gimp-image-delete img) + +)) + diff --git a/script-fu/2.10/przem-soft-focus.scm b/script-fu/2.10/przem-soft-focus.scm new file mode 100644 index 0000000..055e988 --- /dev/null +++ b/script-fu/2.10/przem-soft-focus.scm @@ -0,0 +1,49 @@ +; przem-soft-focus - Tworzy efekt miękkiego focusa +; author: PRP +; licencja: Public Domain +; Gdańsk - 15-09-2025 +; ver. 2.250615-0 + +(define (przem-soft-focus img drawable blur-radius opacity) + + (let* ( + (soft-layer (car (gimp-layer-copy drawable FALSE))) + ) + (gimp-context-push) + (gimp-image-undo-group-start img) + + (gimp-image-insert-layer img soft-layer 0 -1) + (gimp-item-set-name soft-layer "Soft Focus") + + ; Rozmycie Gaussa + (plug-in-gauss 1 img soft-layer blur-radius blur-radius 0) + + ; Zmień tryb mieszania na Overlay lub Screen + (gimp-layer-set-mode soft-layer OVERLAY-MODE) + + ; Dostosuj przezroczystość + (gimp-layer-set-opacity soft-layer opacity) + (gimp-image-merge-down img soft-layer CLIP-TO-IMAGE) + + + (gimp-image-undo-group-end img) + (gimp-displays-flush) + (gimp-context-pop) +)) + +; Rejestracja skryptu w menu GIMP +(script-fu-register "przem-soft-focus" + _"Apply a Soft Focus..." + _"Tworzy efekt miękkiego focusu" + "PRP" + "Public Domain" + "2025-06-15" + "RGB*, GRAY*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-ADJUSTMENT "Blur (px)" '(15 1 100 1 10 0 1) + SF-ADJUSTMENT "Transparency (%)" '(50 0 100 1 10 0 1) +) + +(script-fu-menu-register "przem-soft-focus" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/2.10/przem-traditional-photo.scm b/script-fu/2.10/przem-traditional-photo.scm new file mode 100644 index 0000000..a43ef58 --- /dev/null +++ b/script-fu/2.10/przem-traditional-photo.scm @@ -0,0 +1,52 @@ +; przem-traditional-photo - luźne nawiązanie do chemii tradycyjnej fototgrafii +; author: PRP +; licencja: Public Domain +; Gdańsk - 15-02-2025 +; ver. 2.250217-0~beta + +(define (cross drawable) + ; crossing photo + (gimp-curves-spline drawable HISTOGRAM-VALUE 10 #(0 0 64 90 128 160 192 230 255 255)) + (gimp-curves-spline drawable HISTOGRAM-RED 10 #(0 0 64 50 128 180 192 230 255 255)) + (gimp-curves-spline drawable HISTOGRAM-GREEN 10 #(0 0 64 80 128 120 192 200 255 255)) + (gimp-curves-spline drawable 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) +) + +(define (przem-traditional-photo image drawable crossing contrast-colors contrast balance-color) + + (gimp-image-undo-group-start image) + + (if (= crossing TRUE) + (cross drawable)) + ;(if (= grain TRUE) + ; (gimp-noise-hurl drawable 1 0.02)) + (if (= contrast-colors TRUE) + ; Zmniejsz kontrast i dodaj kolor + (gimp-brightness-contrast drawable 10 contrast) + (gimp-color-balance drawable FALSE 0 balance-color 0 10)) + + (gimp-image-undo-group-end image) + (gimp-displays-flush) +) + +(script-fu-register "przem-traditional-photo" + _"Convert photographs to neotraditional" + _"Konwertuje na neotradycyjną fotografię" + "Przemyslaw R. Pietraszczyk" + "Public Domain" + "2025-02-15" + "RGB*" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-TOGGLE "Crossing" FALSE + ;SF-TOGGLE "Grain" FALSE + SF-TOGGLE "Contrast and Color corection" TRUE + SF-ADJUSTMENT "Contrast" '(-30 -100 100 1 1 0 0) + SF-ADJUSTMENT "Balance Color" '(-5 -100 100 1 1 0 0) +) + +(script-fu-menu-register "przem-traditional-photo" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.0/przem-add-background-under-text-v3.scm b/script-fu/3.0/przem-add-background-under-text-v3.scm new file mode 100644 index 0000000..943e00c --- /dev/null +++ b/script-fu/3.0/przem-add-background-under-text-v3.scm @@ -0,0 +1,96 @@ +; 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.250215-1~alpha for Gimp 3.0 + +(define (przem-add-background-under-text-v3 image drawable text font font-size fg-color bg-color background-transparency opacity) + + (gimp-image-undo-group-start image) + + (let* ( + (image-width (car (gimp-image-get-width image))) + (image-height (car (gimp-image-get-height image))) + ;(text-extents (gimp-text-get-extents-fontname text font-size 0 font)) + (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 (car (gimp-text-fontname image -1 0 0 text 0 TRUE font-size 0 font))) + (text-layer (car(gimp-text-font image -1 0 0 text 0 TRUE font-size font))) + (bg-layer (car (gimp-layer-new image "Background" bg-x-right text-height RGB-IMAGE 100 LAYER-MODE-NORMAL))) + ;(is-nocolorful (car (gimp-drawable-is-gray drawable))) ; czy obraz jest w odcieniach szarości + ) + + ; Ustawienie koloru tła + (gimp-context-set-background bg-color) + (gimp-context-set-foreground fg-color) + + (gimp-drawable-fill bg-layer FILL-BACKGROUND) + (gimp-layer-set-opacity bg-layer opacity) + + ; jeśli obraz jest szary to konwertuje go na RGB - tak na sztukę + ;(if (= is-nocolorful TRUE) + ; (gimp-image-convert-rgb image) + ;) + ; TODO + ; jeśli obraz jest szary to konwertuje go na RGB - w RC2 ten numer nie przedzie + ;(if (= type GRAY-IMAGE) + ; (gimp-image-convert-rgb image) ) + ; lub lepiej ... + ;(if (> (car (gimp-drawable-type (vector-ref drawable 0))) 1 ) + ; (gimp-image-convert-rgb image)) + + ; 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 + ) + ) + + ; 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) + + ; Aktualizacja widoku + (gimp-displays-flush) + + (gimp-image-undo-group-end image) ; Zakończ grupę operacji undo + ) +) + +(script-fu-register "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-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + 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" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.0/przem-apply-sepia-v3.scm b/script-fu/3.0/przem-apply-sepia-v3.scm new file mode 100644 index 0000000..aa495b7 --- /dev/null +++ b/script-fu/3.0/przem-apply-sepia-v3.scm @@ -0,0 +1,154 @@ +; 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.2502022-0~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 . +; + +(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-image-undo-group-start image) + ;(gimp-image-undo-disable image) + + ; TODO - z kodu old-photo wynika że nie trzeba konwertować na RGB - mimo tego kod nie dziala jak należy + ; jeśli obraz jest szary to konwertuje go na RGB - w RC2 ten numer nie przedzie + ;;(if (= type GRAY-IMAGE) + ; (gimp-image-convert-rgb image) ) + ; lub ... + ;(if (> (car (gimp-drawable-type (vector-ref drawable 0))) 1 ) + ; (gimp-image-convert-rgb image)) + + (gimp-selection-all image) + (set! the-layer (car (gimp-image-flatten image))) + + ; Konwersja obrazu do skali szarości + ;(if (= type RGB-IMAGE) + ;(gimp-drawable-desaturate the-layer DESATURATE-LIGHTNESS) + ;) + + (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) + ) + ) + + (gimp-context-pop) + + + ; 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) +) ) + +(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" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/3.0/przem-soft-focus-noninteractive-v3.scm b/script-fu/3.0/przem-soft-focus-noninteractive-v3.scm new file mode 100644 index 0000000..98d5ed0 --- /dev/null +++ b/script-fu/3.0/przem-soft-focus-noninteractive-v3.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.0/przem-traditional-photo-v3.scm b/script-fu/3.0/przem-traditional-photo-v3.scm new file mode 100644 index 0000000..ee9b727 --- /dev/null +++ b/script-fu/3.0/przem-traditional-photo-v3.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" + "/Filters/PIETRASZCZYK/") diff --git a/script-fu/changelog.md b/script-fu/changelog.md new file mode 100644 index 0000000..bca2d9e --- /dev/null +++ b/script-fu/changelog.md @@ -0,0 +1,129 @@ +# [2.250622-0] przem-prossian-blue-effect.scm +* Dodane filtra imitującego "pruski błękit" + +# [2.250619-3] przem-soft-focus-noninteractive-v3.scm +* Dodanie filtra wywolywanego z linii poleceń - nie uruchamia się + +# [2.250618-0] przem-cyanotype-gum-effect.scm +* Dodanie efektu zastosowania cyjanotypi wraz z gumą dwuchromianową\ + +# [2.250616-0] przem-soft-focus-noninteractive.scm +* Dodanie filtra wywolywanego z linii poleceń + +# [2.250615-0] przem-soft-focus.scm +* Dodanie filtra "miękkiego focusa' - w nawiązaniu do piktorializmu + +# [2.250610-4] przem-expired-negative.scm +* Konwersja z RGB na colorspace Gray + +# [2.250610-3] przem-expired-negative.scm +* Dzielnik mgły, zwiększony do 0.50 + +# [2.250610-2] przem-expired-negative.scm +* Dodanie suwaka density + +# [2.250610-1] przem-expired-negative.scm +* Przy odwolywaniu się do wspólnej funkcji gradientu - filtr dzialą nieprawidlowo +* Możliwa zmiana odcieniu gradientu (background) + +# [2.250608-3] przem-expired-negative.scm +* Dodaje efekt prawidłowo, zarówno na dole jak i na górze + +# [2.250608-2] przem-expired-negative.scm +* Dodaje efekt expire ORWO do poziomego zdjęcia, jednak nie równomiernie + +# [2.250525-1] przem-expired-negative.scm +* Rozróżnia rodzaj obrazu. Jednak prawidłowo przetwarza jedynie póki co portrety + +# [2.250522-4] przem-expired-negative.scm +* Mgła jest prawidłowo rozmieszczana po przegach + +# [2.250522-0] przem-expired-negative.scm +* Filtr imitujący przetermonowany negatyw ORWO - Inicjacja + +# [2.250225-2] przem-apply-waves-effect.scm +* Filtr, działać, działa. Jednak wynik, trudno uzanć za falowanie. + +# [2.250225-1] przem-apply-waves-effect.scm +* Pierwszy mały sukces + +# [2.250225-0] przem-apply-waves-effect.scm +* Próba skopiowania barwy pixela + +# [2.250224-0] przem-apply-waves-effect.scm +* Nowa propozycja z sincosinus + +# [2.250223-3] przem-apply-cents-effect.scm +* Drobne literówki + +# [2.250223-2] przem-apply-cents-effect.scm +* Dodanie nowego filtra - centkowanie + +# [2.250223-0] przem-apply-waves-effect.scm +* Dodanie nowego filtra + +# [2.250222-0] przem-apply-sepia-v3.scm +* Korekta w SF_OPTION + +# [2.250221-0] przem-apply-sepia-v3.scm +* Dodanie potrójnego pola wyboru dla rodzaju gradientu. + +# [2.25021=20-0] przem-apply-sepia-v3.scm +* Przeniesienie 'gimp-layer-new' do wewnątrz skryptu - desaturate dalej zwraca błąd przy zdjęciach monochromatycznych + +# [2.250219-1] przem-apply-sepia-v3.scm +* Dodanie 'gimp-image-flatten', bez efektu + +# [2.250219-0] przem-apply-sepia-v3.scm +* Dodanie suwaka z shadow-sepia użytego jako argument 'gimp-drawable-edit-gradient-fill' + +# [2.250217-0] przem-traditional-photo.scm && przem-traditional-photo-v3.scm +* Zmniejszyłem skrajne parametry do -100 i 100 dla skali kontrastu i balansu koloru + +# [2.250216-3] przem-traditional-photo-v3.scm +* Dodanie krosowania. Jednak można odnieść wrażenie że zmiana balans koloru nie daje żądnego efektu + +# [2.250216-2] przem-traditional-photo-v3.scm +* Rezygnacja ze suwaka kontrastu na rzecz zmiennej ( -0.15625 )- możliwe że wersja dla 2.10 wykrzącza się przez zbyt wysoki argument dla kontrastu + +# [2.250216-1] przem-traditional-photo.scm +* Kosmetyka danych suwaka + +# [2.250216-0] przem-traditional-photo.scm +* Dodanie suwaka ze zmianą kontrastu oraz suwaka z balansem koloru + +# [2.250215-2] przem-traditional-photo.scm +* dodanie nowego skryptu korsującego zdjęcie + +# [2.250215-1] przem-apply-sepia.scm - przem-add-background-under-text.scm +* Oba skrypty pracują nieprawidłowo z obrazem w odcieniach szarości + +# [2.250215-0] przem-apply-sepia.scm +* BUG ? Nie potrafi przekonwertować obrazka GRAY na RGB - w przypadku szarego obrazu nakłąda jedynie gradient, bez sepii + +# [1.250214-0] przem-apply-sepia.scm +* Częściowe dostosowanie wtyczki do nowego API z RC2 - póki co przetwarza jedynie kolorowe obrazy + +# [1.250213-0] przem-apply-sepia.scm +* Dodałem lepszy gradient, revers gradientu oraz kształt okręgu + +# [1.250212-0] przem-apply-sepia.scm +* Opruje już jedynie na dwóch odcieniach sepii + +# [1.250212-0] przem-add-background-under-text.scm +* Możliwość zmiany koloru tła i czcionki wewnątrz wtyczki, nie można zmienić czcionki. Potrafi się wykrzaczyć + +# [1.250910-0~alpha] +* Wersja alpha 'przem-add-background-under-text.scm', pokazuje samo tło i w dodatku w złym miejscu + +# [1.250910-2] +* Wersja stabilna 'przem-apply-sepia.scm' dla 3.0 + +# [1.250209-1] +* Wersja stabilna 'przem-add-background-under-text.scm' dla 2.10 + +# [0.250207-0] +* Incjacja skryptu 'przem-apply-sepia.scm' + +# [0.250206-0] +* Incjacja skryptu 'przem-add-background-under-text.scm' -- cgit v1.2.3