0

我想在我的 Grails 应用程序中使用 ImageMagick。我在 BuildConfig.groovy 中使用以下依赖项

compile('jmagick:jmagick:6.6.9')
compile('org.im4java:im4java:1.2.0')

但是,当我尝试运行时,出现此错误:

org.im4java.core.CommandException: java.io.IOException: Cannot run program 
"convert": error=2, No such file or directory.

如何在不直接安装 Grails 的情况下将 ImageMagick 或 Jmagick 与 Grails 一起使用,我是否缺少一些依赖项?

4

3 回答 3

1

jmagick 和 im4java 采用两种不同的方法来使用 ImageMagick。简而言之,jmagick 使用 Java INI 访问 ImageMagick API,im4java 调用 ImageMagick 工具。换句话说,jmagick 捆绑了 ImageMagick,而 im4java 没有。您可能知道,该错误是由于 ImageMagick 未安装或不在环境 PATH 中造成的。

im4java

两个不在一起。例如,您不能使用 im4java 调用 jmagick 以避免在托管 Grails 应用程序的计算机上安装 ImageMagick。要使用 im4java,您需要安装 ImageMagick。

魔术师

因为 jmagick 部分是用 C 实现的,所以在 Servlet 容器中使用可能会有问题。它肯定会使网络应用程序不可移植。可能的工作是让 Servlet 容器提供为该平台编译的 jmagick,并从 war 文件中排除 jmagick。不要问我怎么做:)

于 2015-09-29T22:01:17.517 回答
0

首先第一件事:我建议你使用 1.4.0 版本的 imagemagick :)。阅读错误似乎您没有配置imagemagick路径。在我使用 imagemagick 代码的 grails 应用程序中,如下所示:

 @Value('${externalTools.imagemagick.path:/usr/local/bin}')
 private String imagemagickPath

 CreateTemporaryThumbnailsResult call(CreateTemporaryThumbnailsEvent event){

    log.debug("IMAGEMAGICK PATH: $imagemagickPath")

    String originalFilePath = generateOriginalFilePath(event.fileName, event.fileExtension)
    String mediumFilePath = generateMediumFilePath(event.fileName, event.fileExtension)

    // create command
    ConvertCmd cmd = new ConvertCmd();
    cmd.setSearchPath(imagemagickPath)

    // create the operation, add images and operators/options
    IMOperation op = new IMOperation();
    op.addImage(originalFilePath);

    op.thumbnail(mediumSizeImage, mediumSizeImage)
    op.background("white")
    op.gravity("center")
    op.extent(mediumSizeImage,mediumSizeImage)
    op.addImage(mediumFilePath);

    // execute the operation
    try {
        cmd.run(op);
    } catch (IOException e) {
        return new CreateTemporaryThumbnailsResult(false)
    } catch (InterruptedException e){
        return new CreateTemporaryThumbnailsResult(false)
    } catch(Exception e){
        return new CreateTemporaryThumbnailsResult(false)
    }

    return new CreateTemporaryThumbnailsResult(true, event.fileName + ImageSize.MEDIUM.toString() + "." + event.fileExtension, event.fileName)
}

我以 hipsteroid grails 项目为例来了解如何将 imagemagick 与 grails 一起使用,如果您有任何疑问,我建议您也这样做,它确实充满了有关使用 groovy 和 imagemagick 进行图像处理的信息。

于 2015-09-30T07:37:07.230 回答
0

您还可以在您的机器上安装 imageMagick 并使用“executeCommand”执行 shell 命令来编辑图像,例如:

 def resizeCommand = "/usr/bin/convert pathTo/myOriginalImage.jpg -resize 1920 -quality 80 pathTo/myNewImage.jpg"
            executeCommand(resizeCommand)
于 2015-11-06T10:02:43.877 回答