使用 im4java + gm4java 运行 GraphicsMagick 比较命令

Posted

技术标签:

【中文标题】使用 im4java + gm4java 运行 GraphicsMagick 比较命令【英文标题】:Run GraphicsMagick compare command using im4java + gm4java 【发布时间】:2015-02-11 00:06:45 【问题描述】:

我正在尝试使用 im4java 和 gm4java 进行 GraphicsMagick 比较。我使用的 GraphicsMagick 命令是这样的:

gm compare -maximum-error 0 -metric MAE -highlight-style xor -hilight-color red -file C:/output/diffFile.pdf C:/input/file1.pdf C:/input/file2.pdf

我正在尝试将其翻译成 Java。我知道 im4java 最初是为 ImageMagick 构建的,它们的命令可能会有所不同。是否可以使用 im4java 加 gm4java 运行上述比较?

我试过这个:

SimpleGMService service = new SimpleGMService();
service.setGMPath("C:/path/to/graphicsMagick/gm.exe");

try

    GMConnection connection = service.getConnection();
    try 
        GMBatchCommand command = new GMBatchCommand(service, "compare");
        // create the operation, add images and operators/options
        IMOperation op = new IMOperation();
        op.metric("MAE");
        op.addRawArgs("-file C:/output/diffFile.pdf");
        op.addImage();
        op.addImage();

        ArrayListOutputConsumer output = new ArrayListOutputConsumer();
        command.setOutputConsumer(output);

        //debug
        command.createScript("C:/output/myscript.bat",op);

        command.run(op, "C:/input/file1.pdf", "C:/input/file2.pdf");

....

上面给了我错误:

org.im4java.core.CommandException: compare: Unrecognized option (-file C:/output/diffFile.pdf)

【问题讨论】:

【参考方案1】:

您可以通过单独使用 im4java 或 im4java+gm4java 来实现。 gm4java 给你的是当你需要处理大量图像时的性能。

您遇到的问题是由于addRawArgs() 方法使用不当造成的。您在命令行中拥有的每个参数都需要作为单独的参数添加,而不是一起添加到一个字符串中。

试试:

op.addRawArgs("-file", "C:/output/diffFile.pdf");

【讨论】:

谢谢肯尼斯!你是对的,我没有正确使用 addRawArgs 方法。我正在构建一个回归测试器,它最终需要处理大量文件,因此 gm4java 可能会派上用场。您能够创建它真是太棒了! @Chuck,很高兴我能提供帮助,也很高兴知道 gm4java 对你有用。 @ben,感谢您编辑答案。现在读起来好多了。

以上是关于使用 im4java + gm4java 运行 GraphicsMagick 比较命令的主要内容,如果未能解决你的问题,请参考以下文章

im4java+GraphicsMagick 的问题

im4java包处理图片

im4java+GraphicsMagick

GraphicsMagick +im4java高并发处理大型网站图片工具-图片剪切遮蔽水印添加之环境搭建

调用imagick做图片等比例压缩5M到100kb

java知识汇总