Перемістіть шар до певного положення X, Y в Gimp


58

Як перенести шар на певну позицію XY в межах полотна в Gimp?

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


Я теж хочу це знати, або як це зробити у Photoshop. Я поставив за це питання. superuser.com/questions/345669/…
Jonny

1
Здається, це не можливо (легко) можливо в GIMP без використання коду Python, як детально описано нижче: graphicsdesign.stackexchange.com/a/6813/8841
SabreWolfy

Так, це можливо. Прочитайте мою відповідь.
Девід

Відповіді:


31

Я боюся, що Gimp не включить його, тому що це нудно. Це просто не відповідний спосіб вирівнювання елементів під час проектування, хоча я визнаю, що іноді це корисно як скорочення. У будь-якому випадку, найкращий (правильний) підхід - це керівництво:


А) Крок 1 - Створіть напрямні

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

Ви також можете створити напрямні, що перетягуються з лінійок:

  1. Перетягніть вниз (починаючи з верхньої лінійки) керівництво до потрібної координати Y.
  2. Перетягніть вниз (починаючи з лівої лінійки) керівництво до потрібної координати X.

Б) Крок 2 - Перемістіть полотно

Можна скористатися рухомим інструментом.

  1. Виберіть свій шар
  2. Перейдіть до Інструменти -> Інструменти трансформації -> Перемістити
  3. Перетягніть шар на напрямні. Gimp подасть вам руку з точними пікселями.

Один із принципів дизайну полягає в тому, що у вашому проекті повинні бути детальні речі. Зменшення кількості вирівнювань (напрямних) допомагає отримати більш чітку конструкцію. Я думаю, саме тому gimp не включає інструмент для визначення точних координат. Якщо ви хочете дотримуватися цього принципу проектування, то точні координати одна за одною стають лише копітка праця.


Саме те, що мені потрібно - дякую. Використовуйте випадок: створення шпалер для встановлення з двома головами з двох інших шпалер. :)
smbear

22
  1. Виберіть введіть тут опис зображення(інструмент вирівнювання).
  2. Зробіть Relative to Image.
  3. Клацніть на своєму шарі (на полотні).
  4. Введіть X у Offsetполе.
  5. Клацніть на Distribute/ введіть тут опис зображення(стрілка вліво).
  6. Введіть Y у Offsetполе.
  7. Клацніть на Distribute/ введіть тут опис зображення(стрілка вгору).

Це воно!


1
Це робота для негативного зміщення.
Лода

1
Зверніть увагу, що, здається, ви можете вибрати лише верхній видимий шар - тобто потрібно приховати шари вгорі шару, який потрібно вирівняти (gimp 2.8.16).
Skippy le Grand Gourou

Чи використовується ця одиниця пікселів? Здається, перенести мій образ набагато більше, ніж я очікував.
palswim

@palswim Для мене це спрацьовувало, коли я натискав верхню групу кнопок (Вирівняти) замість нижньої групи (Поширити). Так, це вимірюється в пікселях (принаймні в моїй конфігурації).
Родріго

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)

Крім того, якщо ви хочете лише перемістити вміст шару:

клацніть правою кнопкою миші, Шар> Перетворити> Зсув

або Shft + Ctrl + O


1
Це спричиняє переміщення пікселів всередині шару, а не самого шару - мені потрібно перемістити фактичний шар. Те, що ви запропонували, може спрацювати, якщо шар має такий самий розмір, як полотно, або принаймні достатньо великий, щоб не нарізати будь-які непрозорі пікселі всередині шару.
Скотт

@Scott: Я бачу - вибачте, що не знайшов простішого шляху, але принаймні я придумав, як перемістити шар до абсолютного положення за допомогою деяких ліній 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: Ну, я думаю, ви повинні піти з певним сценарієм у тому випадку, як Ніколас Кайзер запропонував рішення, але циклічне зображення на шарах зображення ... Я просто відредагував свою відповідь, щоб показати вам, як, подивіться. (Я би зробив окрему відповідь за це, але ОП попросив спеціально перемістити ОДНІЙ шар, а не всі. Якщо ви задасте нове запитання для цього, я би радий відповісти там, додавши кілька знімків екрана та все інше; - Г) Ура
Danicotra
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.