ImageMagick: преобразование изображения по каналу
Я пытаюсь преобразовать изображение из входного потока в выходной поток с помощью 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 ответ
Решил, разместив здесь для потомков.
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;
}