Index: sg-goobie.scm ================================================================== --- sg-goobie.scm +++ sg-goobie.scm @@ -38,11 +38,17 @@ ; names that match the field names. These field layers are used to determine ; the location and size of the text (this layer is otherwise ignored). ; The name text is centered within the bounds of this field template layer. ; ; -(define (script-fu-sg-goobie image datafilename save-dir font fontsize% color) +(define (script-fu-sg-goobie image + datafilename + datafiletype + save-dir + font + fontsize% + use-template-colors ) ;; Perform a search for the largest font that will fit within ;; the cell. ; (define (calc-fontsize text font width height) @@ -89,10 +95,18 @@ (car layers) (loop (cdr layers)) ))))) (if frame-layer (begin (gimp-image-set-active-layer image frame-layer) + (unless (zero? use-template-colors) + (let ((orig-sel (car (gimp-selection-save image)))) + (gimp-selection-layer-alpha frame-layer) + (let ((color (list (car (gimp-histogram frame-layer HISTOGRAM-RED 0 255)) + (car (gimp-histogram frame-layer HISTOGRAM-GREEN 0 255)) + (car (gimp-histogram frame-layer HISTOGRAM-BLUE 0 255)) ))) + (gimp-context-set-foreground color) ) + (gimp-selection-load orig-sel) )) (let* ((fontsize (calc-fontsize field-data font (* fontsize% 0.01 (car (gimp-drawable-width frame-layer)) ) @@ -117,11 +131,10 @@ (let* ((inport (open-input-file datafilename)) (field-names (map symbol->string (read inport))) (filetag (car field-names)) ) (gimp-image-undo-freeze image) (gimp-context-push) - (gimp-context-set-foreground color) (let entry-loop ((fields (read inport))) (unless (eof-object? fields) (let ((temp-image (car (gimp-image-duplicate image))) (filename #f) ) (let field-loop ((field-names field-names) @@ -132,17 +145,56 @@ (create-data-layer temp-image (car field-names) (car field-values)) (field-loop (cdr field-names) (cdr field-values)) )) (if filename (let ((fullname (string-append save-dir DIR-SEPARATOR - filename - ".xcf" ))) - (gimp-xcf-save TRUE - temp-image - (car (gimp-image-get-active-layer image)) - fullname - fullname )) + filename ))) + (case datafiletype + ((0) + (let ((layer (car (gimp-image-flatten temp-image))) + (filename (string-append fullname ".jpg")) ) + (file-jpeg-save RUN-NONINTERACTIVE + temp-image + layer + filename + filename + 0.93 + 0 ; smoothing + 1 ; optimize + 1 ; progressive + "" ; comment + 0 ; subsmp (0-4) + 1 ; baseline + 0 ; restart + 0 ;dct + ))) + ((1) + (let ((layer (car (gimp-image-merge-visible-layers temp-image + CLIP-TO-IMAGE ))) + (filename (string-append fullname ".png")) ) + (file-png-save2 RUN-NONINTERACTIVE + temp-image + layer + filename + filename + FALSE ; interlace + 9 + FALSE ; bkgd + (car (gimp-drawable-has-alpha layer)) + FALSE ; offs + FALSE ; phys + FALSE ; time + TRUE ; comment + FALSE ; svtrans + ))) + ((2) + (let ((filename (string-append fullname ".png"))) + (gimp-xcf-save TRUE + temp-image + (car (gimp-image-get-active-layer image)) + filename + filename ))))) (gimp-message "Error encountered") ) (gimp-image-delete temp-image) ) (entry-loop (read inport)) )) (close-input-port inport) (gimp-context-pop) @@ -158,13 +210,14 @@ "Saul Goode" "June 2012" "*" SF-IMAGE "Image" 0 SF-FILENAME "Data file" "example.data" + SF-OPTION "File type" '(".jpg" ".png" ".xcf") SF-DIRNAME "Save directory" "" SF-FONT "Font" "Sans Bold" SF-ADJUSTMENT "Font Size (% of maximum)" '( 80 0 100 1 10 0 1) - SF-COLOR "Color" '(0 0 0) + SF-TOGGLE "Use colors from template (else FG)" TRUE ) (script-fu-menu-register "script-fu-sg-goobie" "/File" )