GIMP/Scripts/SplitPage
Jump to navigation
Jump to search
- Script names:
- dp-guillotine-all
- dp-guillotine
- Author: Katt83
- Summary: For all open images, or just the current one:
- If no guides, insert them based on selection
- Guillotine from guides
- Creates one new image for each section
- For each image-part, save as a new png in the same directory
- 202.png => 202a.png, 202b.png, ...
- Close the new images
- Notes:
- Non-windows users: Change the top-line's dir-separator to "/"
; Set this to "/" if not on Windows (define dir-separator "\\") ; Guillotine all open images ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (dp-guillotine-all) (let* ( (image-num (car (gimp-image-list)) ) (image-ids (cadr (gimp-image-list)) ) (counter 0) ) (while (< counter image-num) (let* ( ; Reference into image-ids array (image (aref image-ids counter)) ) (dp-guillotine image (car (gimp-image-get-active-drawable image))) (set! counter (+ counter 1)) (print (string-append "All=" (number->string counter) " out of " (number->string image-num))) ) ) ) ) (define (dp-guillotine image drawable) (let* ( (orig_full_filename (car (gimp-image-get-filename image))) (orig_file_no_suffix (file-basename orig_full_filename)) (old_filename (car (last(strbreakup orig_full_filename dir-separator)))) (first_guide (car (gimp-image-find-next-guide image 0))) ) (print old_filename) (if (zero? first_guide) (begin ; guides-from-selection returns either () or (#t) (set! first_guide (dp-guides-from-selection image drawable)) (set! first_guide (if (null? first_guide) 0 1)) ) ) (if (zero? first_guide) (begin (gimp-message (string-append "Set guide or selections on " old_filename " first!!!")) (print (string-append "no guides on " old_filename))) ; else (begin ; guillotine, etc (let* ( (new_image_list (plug-in-guillotine RUN-NONINTERACTIVE image drawable)) (image-num (car new_image_list)) (image-ids (cadr new_image_list)) (i 0) (modifier "a") ) (while (< i image-num) (let* ( ; Reference into image-ids array (image (aref image-ids i)) (new_filename (string-append orig_file_no_suffix modifier ".png")) ) (print new_filename) (file-png-save-defaults RUN-NONINTERACTIVE image (car (gimp-image-get-active-drawable image)) ; drawable new_filename (car (last(strbreakup new_filename dir-separator)))) ; filename (no path) (gimp-image-delete image) ; Increment for the next loop (set! i (+ i 1)) (set! modifier (if (= (strcmp modifier "") 0) ; 2nd file, set modifier to a "a" ; else, add one to the modifier character (increment-char modifier) )) ) ) ; end of while ) ) ) ; end of if ) (gimp-displays-flush) ) (define (dp-guides-from-selection image drawable) (let* ( (boundries (gimp-selection-bounds image)) ;; non-empty INT32 TRUE if there is a selection (selection (car boundries)) (x1 (cadr boundries)) ;1041 (y1 (caddr boundries)) ; 0 (x2 (cadr (cddr boundries))) ;1881 (y2 (caddr (cddr boundries))) ;219 ) ;; need to check for a selection or we get guides right at edges of the image (if (> selection 0) (begin (gimp-image-undo-group-start image) ; No boundaries on image-edges (if (> x1 0) (gimp-image-add-vguide image x1)) (if (> y1 0) (gimp-image-add-hguide image y1)) (if (< x2 (car (gimp-image-width image))) (gimp-image-add-vguide image x2)) (if (< y2 (car (gimp-image-height image))) (gimp-image-add-hguide image y2)) (gimp-image-undo-group-end image) (gimp-displays-flush) ) ) ) ) (define (remove-suffix str) (let* ((str-length (string-length str)) (str-length-without-suffix (- str-length 4))) (substring str 0 str-length-without-suffix))) (define (replace-suffix str old new) (string-append (remove-suffix str old) new)) ; (file-basename (car (gimp-image-get-filename image))) (define (file-basename orig-name) (car (strbreakup orig-name ".")) ) (define (increment-char c) (atom->string (integer->char (+ (char->integer (car (string->list c))) 1))) ) (script-fu-register "dp-guillotine" "_Guillotine image" "Guillotines and saves based on existing guides" "Katt" "Katt83" "08/05/2010" "*" ;accepts any image type SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 ) (script-fu-menu-register "dp-guillotine" "<Image>/DP") (script-fu-register "dp-guillotine-all" "Guillotine _All images" "Guillotines and saves all open images" "Katt" "Katt83" "08/05/2010" "" ;accepts any image type ) (script-fu-menu-register "dp-guillotine-all" "<Image>/DP")