; Pattern from Image Rel 0.04 -Created by graechan ; Comments directed to http://gimpchat.com or http://gimpscripts.com ; ; License: GPLv3 ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; To view a copy of the GNU General Public License ; visit: http://www.gnu.org/licenses/gpl.html ; ; Rel -0.01 Initial Release ; Rel -0.02 Added more image appearances on pattern ; Rel -0.03 Saving of the Pattern is now Optional, but Pattern is always copied to the clipboard and made the 'active pattern' ; Rel -0.04 Added optional Spreading out of Pattern Images, code has also been improved ;;;; (define (script-fu-pattern-from-image image drawable inName spread scale save) (let* ( (image-layer (car (gimp-image-get-active-layer image))) (width (car (gimp-image-width image))) (height (car (gimp-image-height image))) (top-left-layer 0) (top-right-layer 0) (bottom-left-layer 0) (bottom-right-layer 0) (centre-left-layer 0) (centre-right-layer 0) (top-centre-layer 0) (bottom-centre-layer 0) (patternImage 0) (pattern 0) (fileName 0) ) (gimp-context-push) (gimp-image-undo-group-start image) (gimp-context-set-foreground '(0 0 0)) (gimp-context-set-background '(255 255 255)) ;create top-left-layer (set! top-left-layer (car (gimp-layer-copy image-layer TRUE))) (gimp-image-add-layer image top-left-layer -1) (gimp-drawable-set-name top-left-layer "top-left-layer") (gimp-rect-select image (/ width 2) (/ height 2) width height 2 FALSE 0) (gimp-selection-invert image) (gimp-edit-clear top-left-layer) (gimp-layer-translate top-left-layer (- 0 width) (- 0 height)) ;create top-right-layer (set! top-right-layer (car (gimp-layer-copy image-layer TRUE))) (gimp-image-add-layer image top-right-layer -1) (gimp-drawable-set-name top-right-layer "top-right-layer") (gimp-rect-select image 0 (/ height 2) (/ width 2) height 2 FALSE 0) (gimp-selection-invert image) (gimp-edit-clear top-right-layer) (gimp-layer-translate top-right-layer width (- 0 height)) ;create bottom-left-layer (set! bottom-left-layer (car (gimp-layer-copy image-layer TRUE))) (gimp-image-add-layer image bottom-left-layer -1) (gimp-drawable-set-name bottom-left-layer "bottom-left-layer") (gimp-rect-select image (/ width 2) 0 width (/ height 2) 2 FALSE 0) (gimp-selection-invert image) (gimp-edit-clear bottom-left-layer) (gimp-layer-translate bottom-left-layer (- 0 width) height) ;create bottom-right-layer (set! bottom-right-layer (car (gimp-layer-copy image-layer TRUE))) (gimp-image-add-layer image bottom-right-layer -1) (gimp-drawable-set-name bottom-right-layer "bottom-right-layer") (gimp-rect-select image 0 0 (/ width 2) (/ height 2) 2 FALSE 0) (gimp-selection-invert image) (gimp-edit-clear bottom-right-layer) (gimp-layer-translate bottom-right-layer width height) (cond ((= spread FALSE) ;;;;create centre-left-layer (set! centre-left-layer (car (gimp-layer-copy image-layer TRUE))) (gimp-image-add-layer image centre-left-layer -1) (gimp-drawable-set-name centre-left-layer "centre-left-layer") (gimp-rect-select image 0 0 (/ width 2) height 2 FALSE 0) (gimp-edit-clear centre-left-layer) (gimp-layer-translate centre-left-layer (- 0 width) 0) ;;;;create centre-right-layer (set! centre-right-layer (car (gimp-layer-copy image-layer TRUE))) (gimp-image-add-layer image centre-right-layer -1) (gimp-drawable-set-name centre-right-layer "centre-right-layer") (gimp-rect-select image 0 0 (/ width 2) height 2 FALSE 0) (gimp-selection-invert image) (gimp-edit-clear centre-right-layer) (gimp-layer-translate centre-right-layer width 0) ;;;;create top-centre-layer (set! top-centre-layer (car (gimp-layer-copy image-layer TRUE))) (gimp-image-add-layer image top-centre-layer -1) (gimp-drawable-set-name top-centre-layer "top-centre-layer") (gimp-rect-select image 0 0 width (/ height 2) 2 FALSE 0) (gimp-edit-clear top-centre-layer) (gimp-layer-translate top-centre-layer 0 (- 0 height)) ;;;;create bottom-centre-layer (set! bottom-centre-layer (car (gimp-layer-copy image-layer TRUE))) (gimp-image-add-layer image bottom-centre-layer -1) (gimp-drawable-set-name bottom-centre-layer "bottom-centre-layer") (gimp-rect-select image 0 0 width (/ height 2) 2 FALSE 0) (gimp-selection-invert image) (gimp-edit-clear bottom-centre-layer) (gimp-selection-none image) (gimp-layer-translate bottom-centre-layer 0 height)) (else (gimp-selection-none image)) ) ;endcond ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (gimp-image-resize-to-layers image) (set! image-layer (car (gimp-image-merge-visible-layers image EXPAND-AS-NECESSARY))) (gimp-drawable-set-name image-layer "Pattern") (plug-in-autocrop 1 image image-layer) (if (= scale TRUE) (gimp-image-scale-full image width height 2)) ;;;; Create a copy of the image (set! patternImage (car (gimp-channel-ops-duplicate image))) (set! pattern (car (gimp-image-merge-visible-layers image EXPAND-AS-NECESSARY))) ;;;; Save the pattern file (if (= save TRUE) (begin (set! fileName (string-append (car (gimp-gimprc-query "gimp_dir")) "/patterns/" inName ".pat")) (file-pat-save 1 patternImage pattern fileName "" inName) ;;;;Refresh the patterns (gimp-patterns-refresh))) ;;;; Save the pattern to clpboard and make Active (gimp-context-pop) (gimp-edit-copy-visible patternImage) (gimp-context-set-pattern (caadr (gimp-patterns-list ""))) ;;;;Delete the duplicated image (gimp-image-delete patternImage) (gimp-displays-flush) (gimp-image-undo-group-end image) ) ) (script-fu-register "script-fu-pattern-from-image" "Pattern-from-image" "Creates and saves a Seemless pattern from any Image" "Graechan" "Graechan - http://gimpchat.com" "April 2014" "RGB* GRAY*" SF-IMAGE "image" 0 SF-DRAWABLE "drawable" 0 SF-STRING "Name" "New Pattern" SF-TOGGLE "Spread Out Pattern Images" FALSE SF-TOGGLE "Scale to Original Image Size" FALSE SF-TOGGLE "Save Pattern" FALSE ) (script-fu-menu-register "script-fu-pattern-from-image" "/Script-Fu/Patterns/")