Skip to content

Instantly share code, notes, and snippets.

@callistabee
Created January 12, 2016 21:46
Show Gist options
  • Save callistabee/3d0c1bf9499488318beb to your computer and use it in GitHub Desktop.
Save callistabee/3d0c1bf9499488318beb to your computer and use it in GitHub Desktop.
cycle a layer through all possible hues and save frames (for making a gif!)
(define (rainbow img layer dirname)
(let ( (c 0)
(dup-layer 0)
(dup-img 0)
(to-save 0)
)
(set! c -180)
(while (<= c 180)
; duplicate layer
(set! dup-layer (car (gimp-layer-copy layer 0)))
; add duplicate layer to image
(gimp-image-add-layer img dup-layer 0)
; adjust layer
(gimp-hue-saturation dup-layer 0 c 0 0)
; duplicate image
(set! dup-img (car (gimp-image-duplicate img)))
; merge duplicate image
(set! to-save (car (gimp-image-merge-visible-layers dup-img 1)))
; save!
(let* ( (fname-suffix (number->string (if (< c 0) (+ c 360) c)))
(fname (string-append dirname "/rainbow" fname-suffix ".png"))
)
(file-png-save-defaults 1 dup-img to-save fname fname)
)
; delete duplicate image
(gimp-image-delete dup-img)
; remove modified layer
(gimp-image-remove-layer img dup-layer)
; increment counter
(set! c (+ c 1))
)
)
)
(script-fu-register
"rainbow"
"Rainbow Magic"
"Do some rainbow magic."
"Kendall Stewart"
"Kendall Stewart"
"2016"
"RGB*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Layer" 0
SF-DIRNAME "Directory" "/tmp/"
)
(script-fu-menu-register
"rainbow"
"<Image>/Colors"
)
@callistabee
Copy link
Author

oh yeah, the gif-making code:

# zero-pad the indices to get them all in order
for i in `seq 0 359`; do
  k=$(printf "%03d" ${i})
  mv /tmp/rainbow${i}.png /tmp/rainbow${k}.png
done

# requires imagemagick
convert /tmp/rainbow*.png /tmp/rainbow.gif 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment