我正在尝试使用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;
}
谢谢!
答案 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;
}