我正在尝试将剪切路径添加到TIFF
图像。我用TIFF
制作了一个GIMP
文件,其中包含剪切路径,我可以使用它来剪切图像
$img = new Imagick("./test.tiff");
$img->clipPathImage("#1", false);
但是我想像GIMP一样将剪切路径信息作为坐标附加到图像文件本身中,以便稍后其他进程可以读取它...
我已经尝试过使用ImagickDraw,pathStart ... pathFinish,但是它在图像上绘制的内容不是我在GIMP中可以看到的路径,例如
编辑:其他语言的解决方案表示赞赏。
最佳答案
发布之前的基于Java的答案后,我想知道是否有可能以某种方式编写gimp脚本以完成我们想要的事情。事实证明,这是可能的,而且非常容易!
首先安装以下gimp插件,以加载图像,绘制路径,然后将图像另存为tif。将其复制到您的gimp插件文件夹。在Mac上,这是~/Library/Application Support/GIMP/2.10/plug-ins/addpath.py
。创建plug-ins
文件夹(如果尚不存在)。另外,请确保运行gimp(chmod u+x addpath.py
)的用户可执行python文件。
#!/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继续运行。您也可以要求gimp从stdin中读取批处理命令。这样,它就保持打开状态,您只需写入stdin就可以向它发送新的“add-path”命令。gimp -i -b -
关于java - 向图像添加剪切路径信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56476952/