summaryrefslogtreecommitdiff
path: root/script-fu/3.0/przem-kodachrome-v3.scm
blob: 6a5961e1e3e44998a066d04da4bf7e80093b82a5 (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
152
153
154
155
156
157
158
159
; przem-kodachrome-v3 - Fotografia z okresu 20-sto lecia między wojennego
; 2025-09-25 - Przemysław R. Pietraszczyk
; licence: Public Domain
; ver. 2.250929-0
; To script-fu wykorzystuje funkcje ze skryptu 'chrome-it.scm' 
; Autorstwa Spencer Kimball

(define (shadows val)
	(/ (* 0.96 val) 2.55))

(define (midtones val)
	(/ val 2.55))

(define (highlights val)
	; The result is used as "gimp-drawable-color-balance" color parameter
	; and thus must be restricted to -100.0 <= highlights <= 100.0.
	(min (/ (* 1.108 val) 2.55) 100.0))

(define (rval col)    
	(car col))

(define (gval col)
    (cadr col))

(define (bval col)
    (caddr col))



(define (apply-quick-tint img layer1 layer2 width height saturation lightness hc cc)

	(gimp-drawable-color-balance layer1 TRANSFER-SHADOWS 1
                                  (shadows (rval hc))
                                  (shadows (gval hc))
                                  (shadows (bval hc)))
     (gimp-drawable-color-balance layer1 TRANSFER-MIDTONES 1
                                 (midtones (rval hc))
                                  (midtones (gval hc))
                                  (midtones (bval hc)))
     (gimp-drawable-color-balance layer1 TRANSFER-HIGHLIGHTS 1
                                  (highlights (rval hc))
                                  (highlights (gval hc))
                                  (highlights (bval hc)))
                                 
     (gimp-drawable-color-balance layer2 TRANSFER-SHADOWS 1
                                  (shadows (rval cc))
                                  (shadows (gval cc))
                                  (shadows (bval cc)))
     (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1
                                  (midtones (rval cc))
                                  (midtones (gval cc))
                                  (midtones (bval cc)))
     (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1
                                  (highlights (rval cc))
                                  (highlights (gval cc))
                                  (highlights (bval cc)))
                            
     (gimp-drawable-hue-saturation layer2 HUE-RANGE-ALL
                                   0.0
                                   lightness
                                   saturation
                                   0.0))

(define (create-highlights-curve adjustment)
  (let ((curve-data (make-vector 256 'byte)))
    (do ((i 0 (+ i 1)))
        ((= i 256))
      (if (> i 128)
          ; Światła - zastosuj regulację
          (aset curve-data i (min 255 (max 0 (+ i (* (- i 128) adjustment)))))
          ; Cienie - bez zmian
          (aset curve-data i i)
      )
    )
    curve-data
  )
)

(define (create-shadows-curve adjustment)
  (let ((curve-data (make-vector 256 'byte)))
    (do ((i 0 (+ i 1)))
        ((= i 256))
      (if (< i 128)
          ; Cienie - zastosuj regulację
          (aset curve-data i (min 255 (max 0 (+ i (* i adjustment)))))
          ; Światła - bez zmian
          (aset curve-data i i)
      )
    )
    curve-data
  )
)

;(define (przem-oldschool-photogrphy-v3 image drawable temperature strength tint-use
;	brightness contrast highlights shadows whites blacks saturation lightness hc cc)
(define (przem-kodachrome-v3 image drawable highlights shadows saturation lightness hc cc)
		
	; use v3 binding of return args from PDB
	;(script-fu-use-v3)

	(let* (
        ;(temperature-factor (/ (- temperature 6500) 1000))
        ;(red-adjust (* temperature-factor (- strength)))
        ;(blue-adjust (* temperature-factor strength))
        ;(brightness-value (/ brightness 100))
        ;(contrast-value (/ contrast 100))
        (adjust-value-highlights (/ highlights 100))
        (adjust-value-shadow (/ shadows 100))
        (width (car (gimp-image-get-width image)))
        (height (car (gimp-image-get-height image)))
        (layer (vector-ref drawable 0))
        (work-layer (car (gimp-layer-copy layer TRUE)))
        (work-layer-second (car (gimp-layer-copy layer TRUE)))
        ;(work-layer-levels (car (gimp-layer-copy layer TRUE)))
        ;(work-layer-brightness-contrast (car (gimp-layer-copy layer TRUE)))
        (curves-layer (gimp-layer-new image "Cross" width height RGB-IMAGE 100 LAYER-MODE-NORMAL))
        (blacks 1)
        (whites 0)
        )
    (gimp-image-undo-group-start image)
	(gimp-context-push)
	
	(gimp-image-insert-layer image work-layer 0 -1)    
	(gimp-image-insert-layer image work-layer-second 0 -1)    

	(apply-quick-tint image work-layer work-layer-second width height saturation lightness hc cc)
	
	; Regulacja przez poziomy
	; low imput - high input - gamma - output range
    (gimp-drawable-levels work-layer 0 
		blacks
        whites
        1.0 1.0 1.0 0 0)    
		

    (gimp-image-undo-group-end image)
    (gimp-displays-flush)
	(gimp-context-pop)
  )
)

(script-fu-register-filter "przem-kodachrome-v3"
  _"Kodachrome"
  _"Imitacja Kodachrome"
  "PRP"
  "Public Domain"
  "2025-09-25"
  "RGB*"
  SF-ONE-OR-MORE-DRAWABLE
  SF-ADJUSTMENT _"Highlights" '(-80 -100 100 1 10 0 0)
  SF-ADJUSTMENT _"Shadow" '(30 -100 100 1 10 0 0)
  SF-ADJUSTMENT _"Saturation" '(-80 -100 100 1 10 0 0)
  SF-ADJUSTMENT _"Lightness"  '(24 -100 100 1 10 0 0)
  SF-COLOR      _"Highlight balance"  '(211 95 0)
  SF-COLOR      _"Chrome balance"     "black"
)

(script-fu-menu-register "przem-kodachrome-v3"
                         "<Image>/Filters/PIETRASZCZYK/")