Как переместить слой в определенную позицию 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)
В качестве альтернативы, если вы хотите только переместить содержимое слоя:
щелкните правой кнопкой мыши, Layer> Transform> Offset
или 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. Вот и все.