blob: 4d1373d85e511b1604c67005a73a3e28eb3a72e7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
; przem-wet-collodion-v32 - 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 drawable)))
(noise-height (caddr (cddr (gimp-drawable-mask-intersect drawable)))))
(gimp-drawable-merge-new-filter noise-layer "gegl:noise-solid" 0 LAYER-MODE-REPLACE 1.0 "tileable" FALSE "turbulent" FALSE "seed" (random 100)
"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 80)
; 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-v32 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-v32"
_"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-v32"
"<Image>/Filters/PIETRASZCZYK/")
|