gpt4 book ai didi

java - 如何将多个图像输入流传递给 im4java?

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:32 24 4
gpt4 key购买 nike

我正在使用 imagemagick 构建具有多层的 PSD。这适用于我使用 CLI 命令 convert 1.png 1.png 2.png test.psd。 (额外的 1.png 在那里是因为 PSD 的第一层是所有层的扁平化结果)

我想使用 im4java 来完成它,而不实际将图像保存到磁盘(使用 InputStream)。这应该可以通过输入 Pipe 实现使用 InputStream 初始化。但是,它只适用于一个输入图像。如果我有几个,我不知道如何将它们全部作为输入传递给进程的标准输入。

我尝试使用 java.io.SequenceInputStream 连接我的图像输入流,但这会导致错误:

org.im4java.core.CommandException: convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.

我的代码:

FileInputStream imageStream1 = new FileInputStream("1.png");
FileInputStream imageStream2 = new FileInputStream("2.png");
InputStream concatStreams = new SequenceInputStream(imageStream1, imageStream2);

IMOperation op = new IMOperation();
// "-" means to read the image from stdin
op.addImage("-"); // the first, "dummy" image
op.addImage("-"); // 1.png
op.addImage("-"); // 2.png

// output in PSD format to stdout
op.addImage("psd:-");

ConvertCmd cmd = new ConvertCmd();

Pipe pipeIn = new Pipe(concatStreams, null);
cmd.setInputProvider(pipeIn);

// omitted cmd.setOutputConsumer code

cmd.run(op);

最佳答案

我知道这是一个非常古老的问题,但我通过谷歌搜索最终来到这里,所以我认为它可能值得回答。

我通过将输入加载为 java.awt.image.BufferedImage 而不是流来解决它。

BufferedImage image1 = ImageIO.read("1.png");
BufferedImage image2 = ImageIO.read("2.png");

IMOperation op = new IMOperation();
// No argument means to use images given in cmd.run.
// These can be either BufferedImage instances or Strings with the path to files.
op.addImage(); // the first, "dummy" image
op.addImage(); // 1.png
op.addImage(); // 2.png

// output in PSD format to stdout
op.addImage("psd:-");

ConvertCmd cmd = new ConvertCmd();

// omitted cmd.setOutputConsumer code

cmd.run(op, image1, image1, image2);
// for files directly:
// cmd.run(op, "1.png", "1.png", "2.png");

请注意,输出仍然可以通过管道传输到您想要的任何内容。

关于java - 如何将多个图像输入流传递给 im4java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25166395/

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