ImageMagick的/ IM4J FileNotFoundException异常

我试图用IM4J(Java包装为ImageMagick的)来创建JPEG图像的缩略图,这是我第一次经历(曾经)有两个库。 请注意,这是我的技术领导交给我一个硬性要求(所以请不要建议使用比IM4J / ImageMagick的以外的任何)解决方案 - 我的手都在技术选择绑在这里!

我得到一个FileNotFoundException的和convert正确命令,它告诉我,我没有这些库中的一个(或两个)设置。

在我的电脑,这里是我的目录结构:

C:/ myApp/ images/ --> where all of my JPEGs are thumbnails/ --> where I want ImageMagick to send the converted thumbnails to imageMagickHome/ --> Where I downloaded the DLL to ImageMagick-6.7.6-1-Q16-windows-dll.exe ...

在我的Java项目,我请确保IM4J JAR( im4java-1.2.0.jar )是在运行时类路径。 虽然我需要使用1.2.0版本IM4J的,我必须使用ImageMagick的任何版本,我要的自由。 我只是选择了这个版本,因为它似乎是最新的/稳定的版本为我的Windows 7(32位)的机器。 如果我应该使用不同的版本,请给我一个链接到它来自ImageMagick下载页面在你的答案!

至于ImageMagick的,我刚刚下载的EXE从这里把它放在上面提到的文件夹中- 我没有做任何安装,精灵,微星,环境变量的配置等等。

然后,在我的Java代码:

// In my driver... File currentFile = new File("C:/myApp/images/test.jpg"); --> exists and is sitting at this location File thumbFile = new File("C:/myApp/thumbnails/test-thumb.jpg"); --> doesnt exist yet! (destination file) Thumbnailer myThumbnailer = new Thumbnailer(); myThumbnailer.generateThumbnail(currentFile, thumbFile); // Then the Thumbnailer: public class Thumbnailer { // ... omitted for brevity public void generateThumbnail(File originalFile, File thumbnailFile) { // Reads appConfig.xml from classpath, validates it against a schema, // and reads the contents of an element called <imPath> into this // method's return value. See below String imPath = getIMPathFromAppConfigFile(); org.im4java.core.IMOperation op = new Operation(); op.colorspace(this.colorSpace); op.addImage(originalFile.getAbsolutePath()); op.flatten(); op.addImage(thumbnailFile.getAbsolutePath()); ConvertCmd cmd = new ConvertCmd(); cmd.setSearchPath(imPath); // This next line is what throws the FileNotFoundException cmd.run(op); } }

我appConfig.xml文件中包含的Impath的部分:

<imPath>C:/myApp/imageMagickHome</imPath>

请注意 - 如果不能很好地形成这种appConfig.xml,我们的架构验证会抓住它。 由于我们没有获得架构验证错误,我们可以排除这一点是罪魁祸首但是 ,请注意我的文件路径分隔符。 他们都是斜杠。 我这样做是因为我被告知,在Windows系统上,斜杠被视为等同于* nix的反斜杠,在参考文件路径。 不管你信不信,我们是在Windows机器上开发,但部署到Linux服务器,所以这是我的解决方案(同样, 没有我的电话!)。

IM4J甚至承认,Windows用户可以有麻烦,有时这一篇文章,Windows开发人员可能需要设置在解释IM4JAVA_TOOLPATH的环境变量获取此库工作。 我想这个建议,创建了同名的新的全系统环境变量并将其值设置为C:\myApp\imageMagickHome 。 还是没有什么区别。 但是请注意,这里我使用的反斜杠 。 这是因为这的环境变量是本地的我的机器,而appConfig.xml是被部署到Linux服务器一个配置描述符。

从我所知道的,罪魁祸首可能是以下中的一个(或多个):

  • 我没有“安装”ImageMagick的EXE正确,应该使用安装程序/ MSI; 或者我需要添加一些其他的环境变量的ImageMagick(不IM4J)本身
  • 也许我还没有IM4J配置正确,需要增加更多的环境变量
  • 可能是Windows / * nix的“/”与“\”上述从我appConfig.xml文件问题

我也困惑,为什么我得到一个FileNotFoundException的一个名为“转换”的文件:

java.io.FileNotFoundException:转换

我认为这是一个批处理/ shell文件居住在IM4J罐内的地方(因为我下载了ImageMagick中的唯一的事情就是EXE)。 但是,如果我解压IM4J罐子我只看到它的内部类。 我看“脚本生成器”类,所以我想这些开球前我cmd.run(op)调用并创建convert文件,也许这就是我失踪(也许我需要手动揭开序幕这些发生器之一,像CmdScriptGenerator执行之前我Thumbnailer方法。或者,也许我的下载不完整。

无论哪种方式,我只是没有足够的熟悉与任一库知道从哪里开始。

感谢您的任何帮助。

--------------解决方案-------------

运行'的ImageMagick-6.7.6-1-Q16-Windows的dll.exe“安装程序首先安装ImageMagick的库。 然后,请确保您的环境路径包括安装的二进制文件的位置(“CONVERT.EXE','mogrify.exe”等)

分类:java的 时间:2015-03-15 人气:3
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.339 (s). 10 q(s)