我正在使用im4java转换图像。以下程序因堆栈跟踪而崩溃:Caused by: org.im4java.core.CommandException: convert: insufficient image data in file /tmp/magick-254901G7YJ9qaMQv5' @ error/jpeg.c/ReadJPEGImage/1154.
看起来它正在生成一个临时文件。直接在ImageMagick命令行上运行相同的命令可以给我正确的结果。
我正在运行ImageMagick-6.9.10-61
和im4java 1.4.0
我想知道是否有人有任何见识。
IMOperation op = new IMOperation();
op.addImage("-");
op.addImage("jpg:-");
op.quality(0.85);
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
// image is of type MultipartFile
Pipe pipeIn = new Pipe(image.getInputStream(), null);
Pipe pipeOut = new Pipe(null, outputStream);
convertCmd.setInputProvider(pipeIn);
convertCmd.setOutputConsumer(pipeOut);
convertCmd.run(op);
return outputStream.toByteArray();
} catch (Exception e) {
//
}
最佳答案
我看了一些较旧的代码,其中我们做了类似的事情,我意识到您的问题是使用2个管道,其中一个具有空目标,另一个具有空源。这可能会导致使用临时文件。
无需这样做,您只需使用一个管道即可:
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
Pipe pipe = new Pipe(image.getInputStream(), outputStream);
convertCmd.setInputProvider( pipe );
convertCmd.setOutputConsumer( pipe );
return outputStream.toByteArray();
}
从JavaDoc:
您可以在流程管道的两端使用相同的Pipe对象。