-1

(请在此处找到代码快照)-> 1. 您好,我有一些配置了剪切路径的 tif 和 psd 图像。我想做的是,从java中提取它们。所以我使用@haraldk 设计的十二猴子库。但我无法获得路径。来自 readPath() 函数。那是因为,我从 bufferedimage 缓冲区中获得的 imageinputstream 全为零。我不知道为什么会这样。缓冲区在 ImageIO.createImageInputStream(source) 之前有效。(请参阅下面链接中的代码快照)。但在 createimageinputstream() 之后,缓冲区全为零。还有一件事,这只适用于 jpg 和 tiffs。但对于 psd 图像,我什至没有得到 ByteArrayOutputStream,因为 imageIO 不支持 psd 图像。任何人都可以帮助我吗?谢谢你。代码快照在下面的链接中

4

1 回答 1

0

我不知道您的屏幕截图中的所有代码是做什么的,因为它不完整,但是:您需要ImageInputStream从原始文件内容创建。它(IMO)非常简单。:-)

要么,读取应用了路径的图像:

try (ImageInputStream stream = ImageIO.createImageInputStream(new File("image_with_path.jpg")) {
    BufferedImage image = Paths.readClipped(stream);

    // Do something with the clipped image...
}

或者分别读取图像和路径(这基本上是什么readClipped(stream)

try (ImageInputStream stream = ImageIO.createImageInputStream(new File("image_with_path.jpg")) {
    Shape clip = Paths.readPath(stream);
    stream.seek(0);
    BufferedImage image = ImageIO.read(stream);

    if (clip != null) {
        image = Paths.applyClippingPath(clip, image);
    }

    // Do something with the clipped image...
}

我认为您的代码不起作用,因为您首先读取图像(使用一些未公开的代码),然后仅将像素数据写入临时流,并尝试从那里获取路径。但是 中没有路径信息BufferedImage,所以在这个操作中路径信息“丢失”了。同样,您需要从原始文件内容中获取它。

于 2020-07-07T19:03:14.670 回答