1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

How to select multiple layers?

Discussion in 'General GIMP help' started by aeacides, May 11, 2008.

  1. Rod

    Rod Moderator Staff Member

    Joined:
    Apr 19, 2010
    Messages:
    1,740
    Likes Received:
    0
    Trophy Points:
    36
  2. LinaNight

    LinaNight New Member

    Joined:
    Jul 10, 2010
    Messages:
    29
    Likes Received:
    0
    Trophy Points:
    1
    Thank you very much but i already have layer groups scripts in many instances in *.scm scripts and python *.py plug-ins.
    They all very huge but i don't find them to be able to change scale of different layers at at time. I think they are just performing any operations with linked layers such as arranging them in a layer stack. Meanwhile at a canvas editing abilities is still the same and as i think they not able to scale different layers.
    I was googling yesterday and did not find any mentions about multi layer options even in the plug-ins registry. I'm hoping it will be embedded in the following versions.
    I believe that open programs may be professional too for many purposes but without handy layer editing it would be problematic.
    It's a pity a have no time (and maybe brains :question:) for C.
     
  3. Rod

    Rod Moderator Staff Member

    Joined:
    Apr 19, 2010
    Messages:
    1,740
    Likes Received:
    0
    Trophy Points:
    36
    This is the one i have...

    ; Script designed to apply scale or crop to the selected range of layers

    ; This script is released into the public domain.
    ; You may redistribute and/or modify this script or extract segments without prior consent.

    ; This script is distributed in the hope of being useful
    ; but without warranty, explicit or otherwise.

    ; Define Script

    (define (userscript-layers-scalecrop theImage theDraw theLayer1 theLayer2 TypeCheck theBound theNewWidth theNewHeight varX varY theCenter)

    ; Define Variables

    (let*
    (
    (theNumber nil)
    (theRepeat nil)
    (theName nil)
    (theLayerRef nil)
    )


    ; If the end layer is set below the start layer create an error message and terminate
    (if (> theLayer1 theLayer2)
    (begin
    (set! theLayerRef (car (gimp-message-get-handler)))
    (gimp-message-set-handler 0)
    (gimp-message "Error: End layer number must be set higher than start layer number!")
    (gimp-message-set-handler theLayerRef))
    (begin

    ; Begin an undo group
    (gimp-undo-push-group-start theImage)

    ; Get the number of layers in an image and set to a variable
    (set! theNumber (car (gimp-image-get-layers theImage)))

    ; If layer2 is set above total layers change layer2 value to the total number of layers
    (if (> theLayer2 theNumber)
    (set! theLayer2 theNumber))

    ; Set the repeat variable by subtracting the user input values from the total number of layers
    (set! theRepeat (+ (- theLayer2 theLayer1) 1))

    ; Set up variable for setting active layers and attributes
    (set! theLayerRef (cadr (gimp-image-get-layers theImage)))

    ; Alter theNumber for use in setting active layers and attributes
    (set! theNumber (- theNumber (- theLayer1 1)))

    ; Set up offset values for crop for direct usage if crop was selected
    (if (= TypeCheck 1)
    (begin
    (set! varX (- (* varX 2)))
    (set! varY (- (* varY 2)))
    ))

    ; Begin loop and continue while repeat is higher than zero
    (while (> theRepeat 0)

    ; Check for type. Do first set of actions if Scale is requested. Otherwise do second set of actions.
    (if (= TypeCheck 0)
    (begin
    ; scale layer to requested dimensions
    (if (= theBound 0)
    (gimp-layer-scale (aref theLayerRef (- theNumber 1)) theNewWidth theNewHeight FALSE)
    (gimp-layer-scale (aref theLayerRef (- theNumber 1)) (gimp-image-width theImage) (gimp-image-height theImage) FALSE))
    )
    (begin
    ; Crop layer to requested dimensions
    (if (= theBound 0)
    (gimp-layer-resize (aref theLayerRef (- theNumber 1)) theNewWidth theNewHeight varX varY)
    (gimp-layer-resize-to-image-size (aref theLayerRef (- theNumber 1))))
    )
    )

    ; Place affected layers in the center if requested
    (if (= theCenter 0)
    (gimp-layer-set-offsets (aref theLayerRef (- theNumber 1)) (- (/ (car (gimp-image-width theImage)) 2) (/ (car (gimp-drawable-width (aref theLayerRef (- theNumber 1)))) 2)) (- (/ (car (gimp-image-height theImage)) 2) (/ (car (gimp-drawable-height (aref theLayerRef (- theNumber 1)))) 2))))

    ; Alter variables ready for checking for next layer and applying to next layer
    (set! theNumber (- theNumber 1))
    (set! theRepeat (- theRepeat 1))

    )

    ; Update visual display
    (gimp-displays-flush)

    ; End undo group
    (gimp-undo-push-group-end theImage)

    ))
    ))

    ; Register script
    (script-fu-register "userscript-layers-scalecrop"
    "<Image>/Layer/Multi-Layer Options/Scale or Crop Layers..."
    "Scales or Crops layers from the specified layer range"
    "Daniel Bates"
    "Daniel Bates"
    "Dec 2007"
    "*"
    SF-IMAGE "SF-IMAGE" 0
    SF-DRAWABLE "SF-DRAWABLE" 0
    SF-ADJUSTMENT _"Start at which layer?" '(1 1 2000 1 5 0 1)
    SF-ADJUSTMENT _"End at which layer?" '(2 1 2000 1 5 0 1)
    SF-OPTION _"Scale or Crop?" '(_"Scale" _"Crop")
    SF-OPTION _"To Image Boundaries? (Further options are ignored if yes)" '(_"No" _"Yes")
    SF-ADJUSTMENT _"New Width" '(200 1 9000 1 5 0 1)
    SF-ADJUSTMENT _"New Height" '(200 1 9000 1 5 0 1)
    SF-ADJUSTMENT _"Offset X (for crop)" '(0 0 9000 1 5 0 1)
    SF-ADJUSTMENT _"Offset Y (for crop)" '(0 0 9000 1 5 0 1)
    SF-OPTION _"Center Adjusted Layers?" '(_"Yes" _"No")
    )


    Hope that helps you. =)
     
  4. LinaNight

    LinaNight New Member

    Joined:
    Jul 10, 2010
    Messages:
    29
    Likes Received:
    0
    Trophy Points:
    1
    Great post! ;D

    Okay, not so handy as in "adobe's" but better than nothing.
    Still want it to be fully embedded onetime.

    Thank you so much!
     
  5. Rod

    Rod Moderator Staff Member

    Joined:
    Apr 19, 2010
    Messages:
    1,740
    Likes Received:
    0
    Trophy Points:
    36
    anytime, glad i could help. :)
     
  6. freestuffaddict

    freestuffaddict New Member

    Joined:
    Nov 25, 2011
    Messages:
    16
    Likes Received:
    0
    Trophy Points:
    1
    Location:
    Miami Beach FL USA
    Re: How to scale (resize) multiple layers?

    Hello, I did a trial using two images opened as layers, in an attempt to link and lock them and resize them so as to prep to be used in an animation whether for a slideshow or a .gif animation, whichever..

    Well anyway, below is what happened, and, obviously I missed something.

    I do positively recall that a few months ago while browsing randomly among threads I had read that resizing of multiple layers by locking them and using the scale option will indeed work.
    Well, please let me know what I did wrong. Thank You. (see below)

    This is screenshot 1. It shows that the two layers of pane to the left are NOT locked.

    [​IMG]

    This is screenshot 2. It shows that the two layers of pane to the left ARE now LOCKED.

    [​IMG]

    This is Scr3. It shows the scale tool BEFORE resizing -


    [​IMG]

    This is Scr4. It shows the scale tool AFTER resizing -

    [​IMG]

    This is Scr5. This final screenshot shows that only the TOP layer resized to the dimensions specified into the scale tool -

    [​IMG]


    Okay- there you have it, with screenshots and all... ???

    You tell me what I did wrong please, and again- thank you sincerely.
     
  7. Arzoroc

    Arzoroc Moderator Staff Member

    Joined:
    Oct 12, 2009
    Messages:
    2,201
    Likes Received:
    1
    Trophy Points:
    38
    Location:
    Germany
    I'm kind of confused about what result you wanted to have.
    Anyway, locking the alpha channel should be completely useless in this operation: Locking the Alpha channel (the box you ticked, screenshot 2) basically means that you cannot edit any transparent part of your image. You prevent the transparency channel to be altered by any tools (for example, if I have a photo in front of a transparent background and I lock the Alpha Channel, I can paint all over the image with the Paintbrush Tool but I will only be able to paint over the photo, and NOT the background.)
    Your photos don't even HAVE an Alpha Channel, so there shouldn't be any use for that option for your problem.

    Or, as the official Gimp docs say:

    Anyway.
    I'll make the same operation and document every single step:

    - Start Gimp
    - Open two images as seperate layers
    - Click on the chain symbol next to both layers
    - Click on the resize-tool
    - Cick on the top layer
    - Drag and drop it to a smaller value


    Works like a charm. Both layers get resized to the correct size.
    Try it again and use my steps. If all of that doesn't work, get Gimp 2.8 and put the two layers into 1 layergroup which can be resized as well.
     

Share This Page