Ответ 1
Это легко сделать, но среди сотен возможных вариантов, которые нужно поместить в пользовательский интерфейс программы, он не был "избран" там.
Выход из программы заключается в использовании возможностей сценариев для выполнения действий: что должно определяться программно, является ли отношение изображения/слоя больше по ширине или высоте, и используйте это соотношение для масштабирования слоя, а затем центрируйте слой.
Для вашего удобства я написал код Python для этого в одной строке, чтобы вы могли просто скопировать и вставить на консоль python (filters- > python- > console), чтобы применить эффект на верхнем слое самого последнего открытого изображения.
img = gimp.image_list()[0]; layer = img.layers[0]; factor = min (float(img.width) / layer.width, float(img.height) / layer.height); layer.scale(int(layer.width * factor), int(layer.height * factor)); layer.set_offsets((img.width - layer.width) / 2, (img.height - layer.height) / 2)
Так как это можно сделать, но не практично, тем более, что это не позволяет вам выберите изображение или слой для изменения размера, я сформировал его как python - script для GIMP. Просто проверьте настройки edit- > preferences- > folders- > плагинов для своего каталога плагинов, вставьте содержимое ниже в файл (если в Windows файл должен иметь расширение ".py". В Linux и Mac OS любое расширение будет работать, но вы должны предоставить файл "exectuable" свойство ").
После перезапуска GIMP у вас будет новая команда, удобно расположенная в вашем меню Layer:
#! /usr/bin/env python
# coding: utf-8
from gimpfu import *
def scale_layer_to_canvas_size(img, layer):
pdb.gimp_image_undo_group_start(img)
factor = min (float(img.width) / layer.width,
float(img.height) / layer.height)
layer.scale(int(layer.width * factor), int(layer.height * factor))
layer.set_offsets((img.width - layer.width) / 2,
(img.height - layer.height) / 2)
pdb.gimp_image_undo_group_end(img)
register("scale-layer-to-canvas-size",
"Scale layer to canvas size",
"Scales the layer to canvas size, keeping the aspect ratio",
"João S. O. Bueno", "Public domain", "2014",
N_("Scale layer to canvas size..."),
"*",
[(PF_IMAGE, "image", "Input image", None),
(PF_DRAWABLE, "layer", "Input drawable", None), ], [],
scale_layer_to_canvas_size, menu="<Image>/Layer/",
)
main()
Обратите внимание, что это тот же код, что и выше, но "img" и "layer" теперь подаются GIMP при выборе действия из меню, и есть два дополнительных вызова, чтобы как масштабирование, так и центрирование "отменены" как одно действие - оставшийся код - это только толкаемая плита котла для регистрации функция с GIMP