gpt4 book ai didi

java - im4java 转换在管道输入/输出上崩溃

转载 作者:行者123 更新时间:2023-12-02 01:25:13 25 4
gpt4 key购买 nike

我正在使用 im4java 来转换图像。以下程序因堆栈跟踪而崩溃: Caused by: org.im4java.core.CommandException: conversion: 文件/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 :

You can use the same Pipe-object for both ends of a process-pipeline.

关于java - im4java 转换在管道输入/输出上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57590610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com