与Grails的ImageMagick

时间:2015-09-29 21:28:59

标签: grails imagemagick im4java

我想在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,我是否缺少某些依赖项?

3 个答案:

答案 0 :(得分:1)

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

im4java

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

jmagick

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

答案 1 :(得分:0)

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

 @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项目作为例子来发现如何使用带有grails的imagemagick,如果你有任何疑问,我建议你也这样做,它真的充满了关于使用groovy和imagemagick进行图像处理的信息。

答案 2 :(得分:0)

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

 def resizeCommand = "/usr/bin/convert pathTo/myOriginalImage.jpg -resize 1920 -quality 80 pathTo/myNewImage.jpg"
            executeCommand(resizeCommand)