首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImageMagick/IM4J FileNotFoundException

ImageMagick/IM4J FileNotFoundException
EN

Stack Overflow用户
提问于 2012-04-18 15:55:40
回答 2查看 3.1K关注 0票数 3

我试图使用IM4J (ImageMagick的Java包装器)创建JPEG的缩略图,这是我第一次使用这两个库。请注意,这是一个困难的要求,由我的技术主管(所以请不要建议使用除了IM4J/ImageMagick)解决方案-我的手在这里的技术选择!

我在和convert命令上得到了一个convert,它告诉我我没有正确设置这些库(或两者都有)。

在我的计算机上,这是我的目录结构:

代码语言:javascript
复制
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,并将它放在上面提到的文件夹中----我没有做任何安装、向导、MSI、环境变量配置等等

然后,在我的Java代码中:

代码语言:javascript
复制
// 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的部分:

代码语言:javascript
复制
<imPath>C:/myApp/imageMagickHome</imPath>

请注意-如果这个appConfig.xml格式不是很好,我们的模式验证器将捕获它。因为我们没有得到模式验证错误,所以我们可以将其排除为罪魁祸首。然而,请注意我的文件路径分隔符;它们都是正斜杠。我这么做是因为我被告知,在Windows系统上,正斜杠在引用文件路径时被视为*nix反斜杠。信不信由你,我们正在Windows机器上开发,但是部署到linux服务器上,所以这是我的解决方案(再次,不是我的调用!)

IM4J甚至承认Windows用户有时会遇到麻烦,并在文章中解释说,Windows开发人员可能必须设置一个IM4JAVA_TOOLPATH env才能使这个库正常工作。我尝试了这个建议,创建了一个新的系统范围内的同名环境变量,并将其值设置为C:\myApp\imageMagickHome。还是没什么区别。,但请注意,这里我使用的是反斜杠。这是因为这个env对我的机器是本地的,而appConfig.xml是一个配置描述符,被部署到linux服务器上。

据我所知,罪魁祸首可能是以下一人(或多人):

  • 我没有正确“安装”ImageMagick EXE,应该使用安装程序/MSI;或者我需要为ImageMagick (而不是IM4J)本身添加一些其他环境变量
  • 也许我仍然没有正确配置IM4J,需要添加更多的环境变量
  • 可能是Windows/*nix“/vs.”如上文所述,从我的appConfig.xml文件中发出

我也很困惑为什么要在一个名为“转换”的文件上获得一个FileNotFoundException

java.io.FileNotFoundException:转换

我假设这是一个驻留在IM4J jar中的批/shell文件(因为我为ImageMagick下载的唯一东西是EXE)。但是,如果我提取IM4J jar,我只会看到其中的类。我看到了“脚本生成器”类,所以我假设这些类在我的cmd.run(op)调用之前开始并创建convert文件,也许这就是我所缺少的(也许我需要手动启动这些生成器之一,比如在执行Thumbnailer方法之前的CmdScriptGenerator )。。或者,也许我的下载不完整。

不管怎样,我对这两个库都不够精通,不知道从哪里开始。

谢谢你在这方面的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-18 16:02:42

首先运行“imagemagick -6.7.6-1-Q16-windows-dll.exe”安装程序来安装imagemagick库。然后确保您的环境路径包括安装的二进制文件的位置(“转换器”、“mogrify.exe”等)

票数 1
EN

Stack Overflow用户

发布于 2017-04-15 17:46:14

确保设置了环境变量IM4JAVA_TOOLPATH。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10213249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档