【问题标题】:ImageMagick's Convert for EPS to JPEG not being called properlyImageMagick 的将 EPS 转换为 JPEG 未正确调用
【发布时间】:2014-12-16 18:56:01
【问题描述】:

M 的主要目标是接收一系列 .eps 文件并使用 ImageMagick 和 GhostScript 将它们转换为 .jpg。我在 Windows 环境中安装了 ImageMagick 和 GhostScript。我在 java 中使用 Process 引用 ImageMagick 的转换命令,但没有运气。使用 Window 的 cmd 工具,我通过导航到 C:\Program Files\ImageMagick-6.8.9-Q16 并使用以下命令成功地将 EPS 转换为 JPEG:

convert Raw\R_GiftcardSizeNew3x5.eps Converted\R_GiftcardSizeNew3x5.jpg

在 Java 中,我在以下代码中使用几乎完全相同的命令:

public void convertEPStoJPG()
{   //commands
    ArrayList<String> cmds = new ArrayList<String>();
    //absolute file paths of eps files retrieved using a helper method
    ArrayList<String> filePaths = this.getFilePaths();
    //beginning cmd line calls
    cmds.add("cmd.exe");
    cmds.add("/c");
    cmds.add("cd C:\\Program Files\\ImageMagick-6.8.9-Q16\\");

    for (int i = 0; i < filePaths.size(); i++)
    {
        //conversion calls
        String tempPath = filePaths.get(i);
        //shortening path name
        tempPath = tempPath.substring(tempPath.lastIndexOf("\\") + 1, tempPath.length());

        //adding command of "convert Raw\\image.eps Converted\\image.jpg"
        cmds.add("convert \\Naked Wines\\Raw\\" + tempPath + " \\Naked Wines\\Converted\\" + 
        tempPath.substring(0,tempPath.length() - 3) + "jpg");
    }
    //building process with commands
    ProcessBuilder pb = new ProcessBuilder(cmds);
    Process process;
    try {    
        pb.redirectErrorStream(true);
        //executing commands
        process = pb.start();

        BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while (true) {
            line = r.readLine();
            if (line == null) { break; }
            //print output from command execution
            System.out.println(line);
        }
    } catch (Exception e) {

        e.printStackTrace();
    }
}

我试图抓取的文件是 C:\Program Files\ImageMagick-6.8.9-Q16\Naked Wines\Raw 我要转换到的目的地是 C:\Program Files\ImageMagick-6.8.9-Q16\Naked Wines\Converted

我收到一条错误消息,指出“系统找不到指定的路径”。查看以前回答的问题,例如How to override Windows' convert command by ImageMagick's one?,人们建议您必须覆盖 Windows convert 命令。这会是错误的原因,还是我遗漏了什么?我对 ImageMagick 还很陌生,可能错过或误解了一些东西。

【问题讨论】:

    标签: java imagemagick imagemagick-convert


    【解决方案1】:

    我最终使用 Im4Java 以不同的方式解决了这个问题,Im4Java 是 ImageMagick 命令行的纯 Java 接口。我通过http://im4java.sourceforge.net/#download 安装了这些库。这是我将 eps 转换为 jpg 的代码:

    public void convertESPtoJPG()
    {
        //initialize ImageMagick operation
        IMOperation op = new IMOperation();
    
        //setting my path allows us to use ImageMagicks "convert" vs. Windows "convert"
        String myPath="C:\\Program Files\\ImageMagick-6.8.9-Q16";
        ProcessStarter.setGlobalSearchPath(myPath);
    
        op.addImage(); //in
        op.addImage(); //out
        ConvertCmd cmd = new ConvertCmd();
    
        //filter out files for eps files, and load the files using included FilenameLoader
        ExtensionFilter filter = new ExtensionFilter("eps");
        FilenameLoader  loader = new FilenameLoader(filter);
        List<String> files = loader.loadFilenames("C:\\Program Files\\ImageMagick-6.8.9- 
    Q16\\NakedWines\\Raw\\");
    
        //what we plan on converting our eps files to
        FilenamePatternResolver resolver = new FilenamePatternResolver("%P/%f.jpg");
    
        //iterate through loaded files
        for (String img: files)
        {
            try {
                //execute our convert commands
                cmd.run(op,img,resolver.createName(img));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    我发现这种方法更容易理解,也更前卫。

    【讨论】:

      猜你喜欢
      • 2014-08-13
      • 2021-07-26
      • 2011-01-31
      • 2015-09-05
      • 2012-11-21
      • 2012-04-11
      • 2012-03-02
      • 1970-01-01
      • 2017-11-24
      相关资源
      最近更新 更多