08-07-2017, 03:35 PM
Hi everybody!
I am a total beginner to Script Fu, and am having a hard time finding good documentation. If anybody has some good general advice, it is very much welcome.
But here is my specific problem:
I would like to write a script which lets me automatically create two images out of one portrait picture: One from the left half of the face and its mirror image, one from the right side respectively. It is to show that a face is never completely symmetric.
In order to get familiar with it all, I have written a very humble script, which should create two copies of the image and flip one of them horizontally.
But already I encounter a problem: It seems to safe the pictures and layers and does not renew them if I apply the script to a new image. Only if I restart GIMP, it renews them. Could somebody please tell me, how I delete the buffer or tell it to overwrite the image/drawable?
And if someone could already tell me the names of the procedures to only copy and flip a selected part of an image and to insert it in a defined place of the new drawable, so I can already try a bit. At least I hope that procedures like this exist...
Thank you so much!
Cheers!
Kat
Here is my current script:
(define (script-fu-two-faces img drw)
(let* (
(drawable-width (car (gimp-drawable-width drw)))
(halfdrawable-width (* drawable-width 0.5))
(drawable-height (car (gimp-drawable-height drw)))
(leftimage (car (gimp-image-new drawable-width drawable-height RGB)))
(leftlayer (car (gimp-layer-new leftimage drawable-width drawable-height 0 "tfl" 100 0)))
(rightimage (car (gimp-image-new drawable-width drawable-height RGB)))
(rightlayer (car (gimp-layer-new rightimage drawable-width drawable-height 0 "tfr" 100 0)))
)
(gimp-image-insert-layer leftimage leftlayer 0 0)
(gimp-drawable-fill leftlayer WHITE-FILL)
(gimp-display-new leftimage)
(gimp-image-insert-layer rightimage rightlayer 0 0)
(gimp-drawable-fill rightlayer WHITE-FILL)
(gimp-display-new rightimage)
(gimp-edit-named-copy drw "tobepastedleft")
(gimp-edit-named-paste leftlayer "tobepastedleft" TRUE)
(gimp-displays-flush)
(gimp-item-transform-flip drw halfdrawable-width 0 halfdrawable-width drawable-height)
(gimp-edit-named-copy drw "tobepastedright")
(gimp-edit-named-paste rightlayer "tobepastedright" TRUE)
(gimp-displays-flush)
)
)
(script-fu-register "script-fu-two-faces"
"Two faces..."
"Creates an image from left side of the face"
"K.Imai"
"K.Imai"
"2017"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable to apply" 0
)
(script-fu-menu-register "script-fu-two-faces" "<Image>")
I am a total beginner to Script Fu, and am having a hard time finding good documentation. If anybody has some good general advice, it is very much welcome.
But here is my specific problem:
I would like to write a script which lets me automatically create two images out of one portrait picture: One from the left half of the face and its mirror image, one from the right side respectively. It is to show that a face is never completely symmetric.
In order to get familiar with it all, I have written a very humble script, which should create two copies of the image and flip one of them horizontally.
But already I encounter a problem: It seems to safe the pictures and layers and does not renew them if I apply the script to a new image. Only if I restart GIMP, it renews them. Could somebody please tell me, how I delete the buffer or tell it to overwrite the image/drawable?
And if someone could already tell me the names of the procedures to only copy and flip a selected part of an image and to insert it in a defined place of the new drawable, so I can already try a bit. At least I hope that procedures like this exist...
Thank you so much!
Cheers!
Kat
Here is my current script:
(define (script-fu-two-faces img drw)
(let* (
(drawable-width (car (gimp-drawable-width drw)))
(halfdrawable-width (* drawable-width 0.5))
(drawable-height (car (gimp-drawable-height drw)))
(leftimage (car (gimp-image-new drawable-width drawable-height RGB)))
(leftlayer (car (gimp-layer-new leftimage drawable-width drawable-height 0 "tfl" 100 0)))
(rightimage (car (gimp-image-new drawable-width drawable-height RGB)))
(rightlayer (car (gimp-layer-new rightimage drawable-width drawable-height 0 "tfr" 100 0)))
)
(gimp-image-insert-layer leftimage leftlayer 0 0)
(gimp-drawable-fill leftlayer WHITE-FILL)
(gimp-display-new leftimage)
(gimp-image-insert-layer rightimage rightlayer 0 0)
(gimp-drawable-fill rightlayer WHITE-FILL)
(gimp-display-new rightimage)
(gimp-edit-named-copy drw "tobepastedleft")
(gimp-edit-named-paste leftlayer "tobepastedleft" TRUE)
(gimp-displays-flush)
(gimp-item-transform-flip drw halfdrawable-width 0 halfdrawable-width drawable-height)
(gimp-edit-named-copy drw "tobepastedright")
(gimp-edit-named-paste rightlayer "tobepastedright" TRUE)
(gimp-displays-flush)
)
)
(script-fu-register "script-fu-two-faces"
"Two faces..."
"Creates an image from left side of the face"
"K.Imai"
"K.Imai"
"2017"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable to apply" 0
)
(script-fu-menu-register "script-fu-two-faces" "<Image>")