我正在使用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-61im4java 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对象。

08-18 20:27