Java 将BuffereImage传递到用于映像文件的FileInputStream
我有两段独立的代码需要一起工作,一段是我自己写的,另一段是另一个项目的。我基本上有一个项目的一部分是创建缓冲图像。下面是其中的一个片段:Java 将BuffereImage传递到用于映像文件的FileInputStream,java,bufferedimage,fileinputstream,Java,Bufferedimage,Fileinputstream,我有两段独立的代码需要一起工作,一段是我自己写的,另一段是另一个项目的。我基本上有一个项目的一部分是创建缓冲图像。下面是其中的一个片段: BufferedImage screenshot = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); 在另一个软件中,它接受一个图像文件,然后作为JSON/POST数据传递给另一个服务。这里是它接受文件的地方: try(I
BufferedImage screenshot = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
在另一个软件中,它接受一个图像文件,然后作为JSON/POST数据传递给另一个服务。这里是它接受文件的地方:
try(InputStream file = new FileInputStream("temp.png")) {
sendFile(out, "file", file, "temp.png");
}
我在Java中使用图像方面没有太多经验,我目前的解决方案是让第一个程序将BuffereImage写入如下文件:
File tempFile = new File("/", "temp.png");
ImageIO.write(screenshot, "PNG", tempFile);
然后,第二段代码能够正确地处理它。问题产生于需要删除临时文件以及由此产生的问题。有什么办法可以简化这一点吗?提前感谢。由于@Mas和评论者的链接,找到了解决方案 第一组代码添加了一个名为“screenshotOutput”的ByteArrayOutputStream 第二组代码被修改为接受ByteArrayInput流
try(InputStream file = new ByteArrayInputStream(screenshotOutput.toByteArray());) {
sendFile(out, "file", file, "temp.png");
}
这解决了我的问题。再次感谢昨天的评论者。那么其他程序需要将图像作为文件接收吗?或者它可以接受类似ByTestStream的内容吗?看起来sendFile方法不一定需要“文件”,而是需要“InputStream”。所以你可以试着创建一个像这样的:。@EvanEdwards如果你能可靠地知道一个文件何时被使用,是的,你可以自己删除它们。但是,如果这两个服务都在持续运行,则最好重构以使用流。:-)@EvanEdwards,听起来像是将它们保存在一个“内存文件”中,换句话说,通过ByteArrayInput/OutputStream的ByteArray可能是完美的。听起来不错,谢谢大家的帮助。明天早上我会读更多的,并尝试解决这个问题!
try(InputStream file = new ByteArrayInputStream(screenshotOutput.toByteArray());) {
sendFile(out, "file", file, "temp.png");
}