ImageMagick:转换管道图像

时间:2014-06-18 15:28:32

标签: java imagemagick im4java

我正在尝试使用im4java将输入流中的图像转换为输出流。在文档中,看起来像将inputProvider设置为输入并指定输出流应该管理转换后的图像,但我得到了:

Failed to convert image: more argument images then placeholders

这是我的功能:

public static InputStream convert(InputStream imageStream){
        try {
            // Set up the im4java properties. See {@link im4java}
            IMOperation op = new IMOperation();
            op.scale(1000);
            op.compress("Zip");
            ConvertCmd convert = new ConvertCmd();

            convert.setSearchPath(imLocation);

            logger.debug("Imagemagick located at: " + convert.getSearchPath());

            InputStream is = imageStream;
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            Pipe pipeIn = new Pipe (is, null);
            Pipe pipeOut = new Pipe(null, os);

            convert.setInputProvider(pipeIn);
            convert.setOutputConsumer(pipeOut);
            convert.run(op, "-", "pdf:-");
            is.close();
            os.close();

           pipeOut.consumeOutput(is);
           return is;
        }catch(Exception e){
            logger.debug("Failed to convert image: " + e.getMessage());
        }
        return null;
    }

谢谢!

1 个答案:

答案 0 :(得分:1)

解决了它,将其张贴在这里为后代发布。

public static InputStream convert(String path, InputStream imageStream){
    try {
        IMOperation op = new IMOperation();
        op.compress("Zip");  //order matters here, make sure colorspace is the first arg set

        InputStream is = imageStream;
        Pipe pipeIn = new Pipe (is, null);
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        Pipe pipeOut = new Pipe(null, os);
        ConvertCmd convert = new ConvertCmd();

        convert.setSearchPath(imLocation);

        convert.setInputProvider(pipeIn);
        convert.setOutputConsumer(pipeOut);

        op.addImage("-");
        op.addImage("pdf:-");
        // execute the operation
        final long startTime = System.nanoTime();
        convert.run(op);
        final long endTime = System.nanoTime();
        logger.debug("Compressed");
        logger.debug("done converting " + path);
        final long elapsedTimeInMs = (endTime - startTime) / 1000000;
        logger.debug("took " + elapsedTimeInMs);

        return new ByteArrayInputStream(os.toByteArray());
    }catch(Exception e){
        logger.debug("Failed to convert image: " + e.getMessage());
    }
    return null;
}