Преобразование ImageMagick для EPS в JPEG не вызывается должным образом

Основная цель M — взять серию файлов .eps и преобразовать их в .jpg с помощью ImageMagick и GhostScript. У меня установлены ImageMagick и GhostScript в среде Windows. Я безуспешно ссылаюсь на команду convert ImageMagick, используя Process в java. С помощью инструмента Windows cmd я успешно преобразовал EPS в JPEG, перейдя в папку C:\Program Files\ImageMagick-6.8.9-Q16 и выполнив следующую команду:

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.

Я получаю сообщение об ошибке "Системе не удается найти указанный путь". Глядя на ранее отвеченные вопросы, такие как Как переопределить Windows convert командой ImageMagick?, люди предлагают переопределить команду Windows convert. Это может быть причиной ошибки, или я что-то упускаю? Я новичок в ImageMagick и, возможно, что-то пропустил или неправильно понял.


person antihero989    schedule 21.10.2014    source источник


Ответы (1)


В итоге я подошел к этой проблеме по-другому, используя Im4Java, чистый интерфейс Java для командной строки ImageMagick. Я установил библиотеки через 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();
        }
    }
}

Я обнаружил, что этот метод намного проще для понимания и более перспективен.

person antihero989    schedule 21.10.2014