我正在尝试将剪切路径添加到TIFF图像。我用TIFF制作了一个GIMP文件,其中包含剪切路径,我可以使用它来剪切图像

$img = new Imagick("./test.tiff");
$img->clipPathImage("#1", false);

但是我想像GIMP一样将剪切路径信息作为坐标附加到图像文件本身中,以便稍后其他进程可以读取它...

我已经尝试过使用ImagickDraw,pathStart ... pathFinish,但是它在图像上绘制的内容不是我在GIMP中可以看到的路径,例如

java - 向图像添加剪切路径信息-LMLPHP

编辑:其他语言的解决方案表示赞赏。

最佳答案

发布之前的基于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/

10-14 19:11