Як перенести шар на певну позицію XY в межах полотна в Gimp?
В даний час єдиний спосіб, який я можу знайти, - це просто очне яблуко за допомогою напрямних та / або положення миші. Я хочу вказати точні координати X і Y.
Як перенести шар на певну позицію XY в межах полотна в Gimp?
В даний час єдиний спосіб, який я можу знайти, - це просто очне яблуко за допомогою напрямних та / або положення миші. Я хочу вказати точні координати X і Y.
Відповіді:
Я боюся, що Gimp не включить його, тому що це нудно. Це просто не відповідний спосіб вирівнювання елементів під час проектування, хоча я визнаю, що іноді це корисно як скорочення. У будь-якому випадку, найкращий (правильний) підхід - це керівництво:
А) Крок 1 - Створіть напрямні
Ви також можете створити напрямні, що перетягуються з лінійок:
Б) Крок 2 - Перемістіть полотно
Можна скористатися рухомим інструментом.
Один із принципів дизайну полягає в тому, що у вашому проекті повинні бути детальні речі. Зменшення кількості вирівнювань (напрямних) допомагає отримати більш чітку конструкцію. Я думаю, саме тому gimp не включає інструмент для визначення точних координат. Якщо ви хочете дотримуватися цього принципу проектування, то точні координати одна за одною стають лише копітка праця.
Relative to
Image
.Offset
поле.Distribute
/ (стрілка вліво).Offset
поле.Distribute
/ (стрілка вгору).Це воно!
Для цього існує сценарій, який можна завантажити з реєстру плагінів GIMP. Це називається:
Перемістити шар до (завантажити) .
Перемістіть сценарій до %USERPROFILE\.gimp-2.8\scripts
каталогу в Windows, ~/Library/Application Support/GIMP/2.8/scripts
OS X або ~/.gimp-2.8/scripts
Linux. ( Офіційні інструкції )
Кліки Filters
-> Script-Fu
-> Refresh scripts
.
Новий пункт меню з’явиться внизу Layer
меню Move to
.
%USERPROFILE%\.gimp-2.8\scripts
Windows, потім зробити Filters
-> Script-Fu
-> Refresh Scripts
і він буде доступний як найнижчий предмет Layer
->Move To
Я використовую 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
img=gimp.image_list()[0]
. _ Не працював для мене.
Є дуже зручний спосіб зробити це доступним з моменту Gimp v.2.10:
двічі клацніть по шару, який потрібно перемістити (або клацніть правою кнопкою миші та виберіть "Змінити атрибути шару")
з'явиться діалогове вікно "Редагувати атрибути шару", і ви можете змінити компенсації 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. Це воно.