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