Переместить слой в определенную позицию X, Y в Gimp


58

Как переместить слой в определенную позицию XY на холсте в Gimp?

В настоящее время я могу найти только один способ - это смотреть с помощью направляющих и / или положения мыши. Я хочу указать точные координаты X и Y.


Я тоже хочу это знать, или как это сделать в Photoshop. Я задал вопрос для этого. superuser.com/questions/345669/…
— Джонни

1
Похоже, что это невозможно (легко) в GIMP без использования кода Python, как подробно описано ниже: graphicdesign.stackexchange.com/a/6813/8841
— SabreWolfy

Да, это возможно. Прочитайте мой ответ.
— Дэвид

Ответы:


31

Боюсь, что Gimp не включает его, потому что это утомительно. Это просто неподходящий способ выравнивания элементов при проектировании, хотя я признаю, что иногда это полезно в качестве кратчайшего пути. В любом случае, лучший (правильный) подход - с помощью руководств:


А) Шаг 1 - Создать направляющие

  1. Перейдите в Image-> Guide-> New Guide
  2. Укажите, хотите ли вы и горизонтальную или вертикальную направляющую
  3. Укажите количество пикселей
  4. Повторите процедуру для другой горизонтальной или вертикальной направляющей (вы также можете сделать больше направляющих для указания ширины и высоты)

Кроме того, вы также можете создавать направляющие, перетаскивая их из линейки:

  1. Перетащите (начиная с верхней линейки) направляющую до нужной вам координаты Y.
  2. Перетащите (начиная с левой линейки) направляющую до нужной вам координаты X.

Б) Шаг 2 - Переместить холст

Вы можете использовать движущийся инструмент.

  1. Выберите свой слой
  2. Перейдите в Инструменты -> Инструменты трансформации -> Переместить
  3. Перетащите слой к направляющим. Gimp даст вам руку с точными пикселями.

Одним из принципов дизайна является то, что вы должны выровнять вещи во всем проекте. Уменьшение количества юстировок (направляющих) поможет вам получить более чистый дизайн. Я думаю, именно поэтому GIMP не включает в себя инструмент для указания точных координат. Если вы хотите следовать этому принципу проектирования, указание точных координат по очереди становится просто утомительным трудом.


Именно то, что мне нужно - спасибо. Вариант использования: создание обоев для установки с двумя головками из двух других обоев. :)
— smbear

22
  1. Pick введите описание изображения здесь(инструмент выравнивания).
  2. Сделай это Relative to Image.
  3. Нажмите на свой слой (на холсте).
  4. Введите X в Offsetполе.
  5. Нажмите на Distribute/ введите описание изображения здесь(стрелка влево).
  6. Введите Y в Offsetполе.
  7. Нажмите на Distribute/ введите описание изображения здесь(стрелка вверх).

Это оно!


1
Эта работа для отрицательного смещения.
— Лода

1
Обратите внимание, что кажется, что вы можете выбрать только верхний видимый слой, то есть нужно скрыть слои поверх слоя для выравнивания (gimp 2.8.16).
— Скиппи ле Гран Гуру

Использует ли это единицу пикселей? Кажется, мой имидж переместился гораздо больше, чем я ожидал.
— Palswim

@palswim Для меня это сработало, когда я нажал верхнюю группу кнопок (Align) вместо нижней группы (Distribute). Да, измеряется в пикселях (по крайней мере, в моей конфигурации).
— Родриго

20

Для этого есть скрипт, который можно скачать из реестра плагинов GIMP. Это называется:

Переместить слой в (скачать) .

Установить:

  1. Переместите сценарий в %USERPROFILE\.gimp-2.8\scriptsкаталог в Windows, ~/Library/Application Support/GIMP/2.8/scriptsOS X или ~/.gimp-2.8/scriptsLinux. ( Официальные инструкции )

  2. Клики Filters-> Script-Fu-> Refresh scripts.

  3. Новый пункт меню появится в нижней части Layerменю Move to.


Хороший первый ответ!
— Slm

Практически идеально! Было бы хорошо, если бы диалог параметров использовал текущие координаты слоя в качестве значений по умолчанию.
— Оливер Гизен

4
Вам нужно скачать этот файл .scm и поместить его в %USERPROFILE%\.gimp-2.8\scriptsWindows, затем сделать Filters-> Script-Fu->, Refresh Scriptsи он будет доступен как самый нижний элемент Layer->Move To
— DarkWalker

3
Ответ Давида делает работу без сценария.
— Майкл С.

1
НЕ работает для отрицательного смещения. и UX плохой (не сохраняйте последнее значение и т. д.).
— Лода

11

Я использую GIMP 2.6.11.

С помощью этих строк Python активный слой можно переместить в абсолютную позицию, например (32, 64), из консоли Python:

>>> 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)

В качестве альтернативы, если вы хотите только переместить содержимое слоя:

щелкните правой кнопкой мыши, Layer> Transform> Offset

или Shft + Ctrl + O


1
Это заставляет перемещаться пиксели в слое, а не сам слой - мне нужно переместить реальный слой. То, что вы предложили, может работать, если слой имеет тот же размер, что и холст, или, по крайней мере, достаточно большой, чтобы не обрезать непрозрачные пиксели внутри слоя.
— Скотт

@ Скотт: я вижу - извините, я не нашел более простой способ, но, по крайней мере, я понял, как переместить слой в абсолютную позицию с некоторыми строками Python.
— Николас Кайзер

2
Третья строка вашего кода должна быть img=gimp.image_list()[0]. _ Не работал для меня.
— apple16

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: Ну, я полагаю, что в этом случае вам следует заняться некоторыми сценариями, аналогично предложенному Николасом Кайзером решению, но зацикливанию на слоях изображений ... Я просто отредактировал свой ответ, чтобы показать вам, как, посмотрите. (Я бы сделал отдельный ответ на это, но ОП попросил переместить ОДИН слой, а не все. Если бы вы задали новый вопрос для этого, я был бы рад ответить, добавив несколько скриншотов и все остальное; - D) Приветствия
— Даникотра
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.