我想在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,我是否缺少某些依赖项?
答案 0 :(得分:1)
jmagick和im4java使用两种不同的方法来使用ImageMagick。简而言之,jmagick使用Java INI访问ImageMagick API,im4java使用ImageMagick工具。换句话说,jmagick捆绑了ImageMagick,而im4java却没有。您可能知道,错误是由于ImageMagick未安装或未在环境PATH中。
两个人不在一起。例如,您不能使用im4java调用jmagick以避免在托管Grails应用程序的计算机上安装ImageMagick。要使用im4java,您需要安装ImageMagick。
因为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)