После публикации предыдущего ответа, основанного на Java, мне стало интересно, можно ли было написать сценарий gimp таким образом, чтобы делать то, что мы хотим. Оказывается, это возможно и довольно просто!
Сначала установите следующий подключаемый модуль gimp, который загружает изображение, рисует путь, а затем сохраняет изображение в формате tif. Скопируйте его в папку с плагинами GIMP. На Mac это ~/Library/Application Support/GIMP/2.10/plug-ins/addpath.py
. Создайте папку plug-ins
, если она еще не существует. Также убедитесь, что файл python исполняется пользователем, который запускает gimp (chmod u+x addpath.py
).
#!/usr/bin/env python
from gimpfu import pdb, main, register, PF_STRING
def add_path(infile, outfile):
image = pdb.gimp_file_load(infile, 'image')
vectors = pdb.gimp_vectors_new(image, 'clippath')
w = image.width
h = image.height
path = [
# The array of bezier points for the path.
# You can modify this for your use-case.
# This one draws a rectangle 10px from each side.
# Format: control1-x, control1-y, center-x, center-y, control2-x, control2-y
10, 10, 10, 10, 10, 10,
w - 10, 10, w - 10, 10, w - 10, 10,
w - 10, h - 10, w - 10, h - 10, w - 10, h - 10,
10, h - 10, 10, h - 10, 10, h - 10
]
pdb.gimp_vectors_stroke_new_from_points(vectors, 0, len(path), path, True)
pdb.gimp_image_add_vectors(image, vectors, 0)
drawable = pdb.gimp_image_get_active_layer(image)
pdb.file_tiff_save(image, drawable, outfile, 'image.tif', 0)
args = [(PF_STRING, 'infile', 'GlobPattern', '*.*'), (PF_STRING, 'outfile', 'GlobPattern', '*.*')]
register('python-add-path', '', '', '', '', '', '', '', args, [], add_path)
main()
После этого вы можете запустить gimp без пользовательского интерфейса в пакетном режиме, запустив плагин.
gimp -i -b '(python-add-path RUN-NONINTERACTIVE "/absolute/path/to/your/input/file.png" "/absolute/path/to/the/tif/file.tif")' -b '(gimp-quit 0)'
Без второго -b '(gimp-quit 0)'
гимп продолжает бегать. Вы также можете попросить gimp прочитать командные команды из stdin. Таким образом, он остается открытым, и вы можете отправлять ему новые команды «add-path», просто написав в stdin.
gimp -i -b -