From 7f292c3d56c327f9c5437ca98636ed0338360c81 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Thu, 9 Jan 2025 20:12:09 +0000 Subject: [PATCH] Add gimp script-fu code for cropping tree sprites --- scripts/script-fu.scm | 73 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 scripts/script-fu.scm diff --git a/scripts/script-fu.scm b/scripts/script-fu.scm new file mode 100644 index 0000000..41b12c7 --- /dev/null +++ b/scripts/script-fu.scm @@ -0,0 +1,73 @@ +;; Utilities + +(define (take count sequence) + (reverse + (let loop ((res '()) (rem sequence) (n count)) + (if (or (null? rem) (= 0 n)) + res + (loop (cons (car rem) res) (cdr rem) (- n 1)))))) + +(define (skip count sequence) + (let loop ((rem sequence) (n count)) + (if (or (null? rem) (= 0 n)) + rem + (loop (cdr rem) (- n 1))))) + +(define (replace old new sequence) + (let ((n (length old))) + (let loop ((pre '()) + (rem sequence)) + (cond ((null? rem) (append (reverse pre) rem)) + ((equal? old (take n rem)) + (append (reverse pre) new (skip n rem))) + (else (loop (cons (car rem) pre) (cdr rem))))))) + +(define (string-replace old new string) + (list->string + (replace (string->list old) + (string->list new) + (string->list string)))) + +(define (foreach-image f) + (let* ((list-result (gimp-image-list)) + (count (car list-result)) + (ids (cadr list-result))) + (do ((i 0 (+ i 1))) + ((>= i count)) + (f (vector-ref ids i)))) + (gimp-displays-flush)) + +(define (export-png image path) + (gimp-context-push) + (let* ((original-active-layer (car (gimp-image-get-active-drawable image))) + (temp-image (car (gimp-image-duplicate image))) + (merged-layer + (car (gimp-image-merge-visible-layers temp-image CLIP-TO-IMAGE)))) + (file-png-save-defaults RUN-NONINTERACTIVE + temp-image merged-layer path path) + (gimp-image-delete temp-image) + (gimp-image-set-active-layer image original-active-layer)) + (gimp-context-pop)) + +(define (active-image) + (vector-ref (cadr (gimp-image-list)) 0)) + +;; Cropping tree sprites + +(define (crop-to-middle-sprite image) + (let* ((width (car (gimp-image-width image))) + (height (car (gimp-image-height image))) + (sprite-width (quotient width 3))) + (gimp-image-crop image sprite-width height sprite-width 0) + (gimp-displays-flush))) + +(define (tree-sprite-export-path image) + (string-replace "originals/Cute_Fantasy/Trees" "sprites/trees" + (car (gimp-image-get-filename image)))) + +(define (export-tree-sprite image) + (export-png image (tree-sprite-export-path image))) + +(define (crop-and-export-tree-sprite image) + (crop-to-middle-sprite image) + (export-tree-sprite image))