将图层移动到Gimp中的特定X,Y位置


58

如何在Gimp中将图层移动到画布中特定的XY位置?

目前,我唯一能找到的方法就是用向导和/或鼠标的位置盯着它。我想指定确切的X和Y坐标。


我也想知道这一点,或者我想知道如何在Photoshop中做到这一点。我对此提出了一个问题。superuser.com/questions/345669/…–
乔尼

1
似乎没有成为(容易)可能在GIMP不使用Python代码具体如下:graphicdesign.stackexchange.com/a/6813/8841
SabreWolfy

对的,这是可能的。阅读我的答案。
戴维(David

Answers:


31

恐怕Gimp不包含它,因为它很乏味。尽管我认识到有时它作为捷径很有用,但这并不是在设计时对齐元素的适当方法。无论如何,最好的(正确的)方法是使用以下指南:


A)步骤1-创建指南

  1. 转到图像->指南->新指南
  2. 指定是否要水平和垂直引导
  3. 指定像素数
  4. 对另一个水平或垂直参考线重复此步骤(您也可以做更多参考线来指定宽度和高度)

或者,您也可以创建从标尺拖动的辅助线:

  1. 向下拖动(从顶部标尺开始)到所需Y坐标的参考线。
  2. 向下拖动(从左标尺开始)到所需X坐标的参考线。

B)步骤2-移动画布

您可以使用移动工具。

  1. 选择你的图层
  2. 转到工具->转换工具->移动
  3. 将图层拖到参考线。Gimp将为您提供精确像素的帮助。

设计原则之一是您应该使整个项目中的内容保持一致。减少路线(指南)的数量有助于您获得更整洁的设计。我认为这就是为什么gimp不包括指定确切坐标的工具的原因。如果要遵循此设计原则,一一指定精确的坐标就变得很繁琐。


正是我需要的-谢谢。用例:从其他两个壁纸创建用于双头设置的壁纸。:)
smbear 2013年

22
  1. 拾取在此处输入图片说明(对齐工具)。
  2. 做吧Relative to Image
  3. 单击您的图层(在画布中)。
  4. Offset字段中输入X。
  5. 单击Distribute/ 在此处输入图片说明(向左箭头)。
  6. Offset字段中输入Y。
  7. 单击Distribute/ 在此处输入图片说明(向上箭头)。

而已!


1
此项用于负偏移量。
罗达

1
请注意,似乎您只能选择最上面的可见图层-也就是说,必须隐藏要对齐的图层顶部的图层(gimp 2.8.16)。
Skippy le Grand Gourou

这是否使用像素单位?这似乎使我的形象超出了我的预期。
palswim's

@palswim对我而言,单击顶部按钮组(“对齐”)而不是底部按钮(“分配”)时,它起作用。是的,它以像素为单位(至少在我的配置中)。
罗德里戈(Rodrigo)

20

有一个脚本可以从GIMP插件注册表中下载。它称为:

将图层移动到(下载)

安装:

  1. 将脚本移动到%USERPROFILE\.gimp-2.8\scriptsWindows,~/Library/Application Support/GIMP/2.8/scriptsOS X或~/.gimp-2.8/scriptsLinux 上的目录。(官方指示

  2. 点击Filters-> Script-Fu-> Refresh scripts

  3. 新菜单项将出现在Layer菜单底部Move to


不错的第一答案!
slm 2013年

几乎完美!如果参数对话框使用图层的当前坐标作为默认值,那就更好了。
奥利弗·吉森

4
您需要下载该.scm文件并将其放入%USERPROFILE%\.gimp-2.8\scriptsWindows中,然后执行Filters-> Script-Fu-> Refresh Scripts,它将作为最底部的项可用Layer->Move To
DarkWalker 2014年

3
Davids Answer无需脚本即可完成工作。
Michael S.

1
对负偏移不起作用。并且UX较差(不要保留最后的值,等等)。
洛达(Loda)2015年

11

我正在使用GIMP 2.6.11。

使用以下这些Python行,可以将活动层从Python控制台移至绝对位置,例如(32,64):

>>> x_new = 32
>>> y_new = 64
>>> img = _[0]
>>> layer = img.active_layer
>>> x_off, y_off = layer.offsets
>>> pdb.gimp_layer_translate(layer, x_new - x_off, y_new - y_off)

另外,如果您只想移动图层的内容,请执行以下操作:

右键单击,图层>变换>偏移

或Shft + Ctrl + O


1
这使得像素的层移动,而不是层本身-我需要移动的实际层。如果该图层与画布的大小相同,或者至少足够大以至于不会在该图层内裁剪任何非透明像素,则建议的方法可能会起作用。
斯科特,

@Scott:我明白了-很抱歉,我没有找到一种更简单的方法,但是至少我想出了如何使用一些Python行将图层移动到绝对位置。
Nicolas Kaiser

2
您代码的第三行应该是img=gimp.image_list()[0]。_没有为我工作。
apple16 2012年

3

从Gimp v.2.10开始,有一种非常方便的方法可以做到这一点:

  1. 双击要移动的图层(或右键单击它并选择“编辑图层属性”)

  2. 将显示“编辑图层属性”对话框,您可以在此处根据需要更改X / Y偏移量

那样简单!:)

编辑图层X / Y偏移属性

编辑:

正如@Michael在对我的答案的评论中询问的那样,我正在添加一个脚本,该脚本将所有图像层移动指定的x,y偏移量。

为了使其正常工作,您需要在Gimp脚本文件夹中创建一个文件(如果需要,请提供一些参考:这里这里),其内容如下:

; This script 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 2 of the License, or
; (at your option) any later version.
;
; This script 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.

;; Command is installed in "Layer->Move all layers..."
;;
;; The purpose of this script is to move all image layers by specified x,y offsets
;; X and Y offset parameters must be provided (use integer numbers as values)
;;


(define (dn-move-all-layers orig-image drawable
                                       x-offset y-offset)
  (define (get-all-layers img)
    (let* (
      (all-layers (gimp-image-get-layers img))
      (i (car all-layers))
      (bottom-to-top ())
     )
     (set! all-layers (cadr all-layers))
     (while (> i 0)
       (set! bottom-to-top (append bottom-to-top (cons (aref all-layers (- i 1)) '())))
       (set! i (- i 1))
     )
     bottom-to-top
    )
  )
  (define (move-layer orig-image layer-id offset-x offset-y)
    (gimp-layer-set-offsets
      layer-id
      offset-x
      offset-y
    )
  )
  (let* (
      (layers nil)
      (layerpos 1)
      (layer-id "")
      (x-os 0)
      (y-os 0)
      (orig-selection 0)
   )
   (gimp-image-undo-disable orig-image)
   (set! orig-selection (car (gimp-selection-save orig-image)))
   (gimp-selection-none orig-image)

   (set! x-os x-offset)
   (set! y-os y-offset)
   (set! layers (get-all-layers orig-image))
   (while (pair? layers)
     (move-layer orig-image (car layers) x-os y-os)
     (set! layers (cdr layers))
     (set! layerpos (+ layerpos 1))
   )
   (gimp-displays-flush)
   (gimp-selection-load orig-selection)
   (gimp-image-remove-channel orig-image orig-selection)
   (gimp-image-undo-enable orig-image)
  )
)

(script-fu-register "dn-move-all-layers"
 "Move all layers..."
 "Move each layer by specified x,y offsets."
 "danicotra"
 "danicotra"
 "08/08/2019"
 ""
 SF-IMAGE "Input image" 0
 SF-DRAWABLE "Drawable" 0
 SF-VALUE "X offset" "0"
 SF-VALUE "Y offset" "0"
)

(script-fu-menu-register "dn-move-all-layers"
                         "<Image>/Layer/")

如果操作正确,您将在“层”菜单中找到一个名为“移动所有层...”的新命令,将其启动,然后将显示一个对话框,让您确定X和Y偏移。而已。


当您要移动许多层(数百层)时,有什么方法可以使此过程更快一些?如果这个东西可以停放,那就太好了,这样我就不必在每一层都提到它!
迈克尔

1
@Michael:好吧,我想在这种情况下,您应该使用一些脚本,类似于Nicolas Kaiser建议的解决方案,但在图像层上循环播放...我刚刚编辑了答案,向您展示了如何看一下。(我会为此做出一个单独的答案,但OP专门要求移动ONE层,而不是全部移动。如果您对此提出新的问题,我很乐意在此处回答,并提供了一些屏幕快照以及所有其他内容;- D)干杯
danicotra
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.