Skript for mirroring left and right side of portrait photo - Printable Version +- Gimp-Forum.net (https://www.gimp-forum.net) +-- Forum: GIMP (https://www.gimp-forum.net/Forum-GIMP) +--- Forum: Extending the GIMP (https://www.gimp-forum.net/Forum-Extending-the-GIMP) +--- Thread: Skript for mirroring left and right side of portrait photo (/Thread-Skript-for-mirroring-left-and-right-side-of-portrait-photo) |
Skript for mirroring left and right side of portrait photo - Juniata - 08-07-2017 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>") RE: Skript for mirroring left and right side of portrait photo - rich2005 - 08-07-2017 welcome to gimp-forum.net I am no coder, I am sure there will someone along soon. In the meantime there is a script here: http://gimpchat.com/viewtopic.php?f=9&t=14568#p201077 that does similar to your requirement. It might give some clues for modifying your script. RE: Skript for mirroring left and right side of portrait photo - Kevin - 08-07-2017 gimp-edit-named-paste creates a floating selection that needs to be anchored: Code: (define (script-fu-two-faces img drw) RE: Skript for mirroring left and right side of portrait photo - Ofnuts - 08-07-2017 Do not, ever, use clipboard functions internally in scripts! When you do that:
Use of the copy/paste clipboard functions is OK only as an explicit interface to the outside world (as in File>Create>From clipboard, or copying something to the clipboard because it will be used on some other program). RE: Skript for mirroring left and right side of portrait photo - Juniata - 08-08-2017 (08-07-2017, 07:00 PM)Kevin Wrote: gimp-edit-named-paste creates a floating selection that needs to be anchored:Thank you Kevin. But the problem persists: if I apply the script to another picture without restarting GIMP, it creates the new images (left and right...) from the old picture. (08-07-2017, 09:33 PM)Ofnuts Wrote: Do not, ever, use clipboard functions internally in scripts! Okay. What is the alternative? RE: Skript for mirroring left and right side of portrait photo - Kevin - 08-08-2017 You need to delete the named buffer after you have used it: Code: (gimp-edit-named-copy drw "tobepastedleft") RE: Skript for mirroring left and right side of portrait photo - Ofnuts - 08-08-2017 (08-08-2017, 02:09 PM)Juniata Wrote:(08-07-2017, 09:33 PM)Ofnuts Wrote: Do not, ever, use clipboard functions internally in scripts!Okay. What is the alternative? Mu own code does: Code: # make a copy of the layer, with an alpha channel Where symmetryFunction is something like this (it basically transforms the top layer, and sets a selection so that the adequate parts can be cleared) Code: def straightSymmetryCore(image,layer,symLayer,side): The complete code is here. Note that:
|