gpt4 book ai didi

java - 如何在 Java 中获取字节并从中生成图像文件?

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

我团队中的一个人正在计算一个生成 RGB 字节数组的任务。该程序在服务器上运行 headless 环境,这是否意味着我无法导入任何 awt 类?我想使用 OutputStream 通过 HTTP GET 将字节发送到浏览器。我可以使用保存在服务器 HDD 上的 PNG 文件来完成所有操作,但现在我想使用 byte[] 而不是文件。

我的代码现在看起来像这样用于读取文件。我无法使其适用于 byte[]。我尝试只向输出流提供一些随机字节,但我从未在浏览器中获得图像。我知道它看起来不像该文件,但我期望会随机出现一些东西,但什么也没发生。

File file = new File("images/test.png");
FileInputStream in = new FileInputStream(file);
OutputStream out = new OutputStream();
byte[] buf = new byte[1024];
int count = 0;
while((count = in.read(buf)) >= 0)
{
out.write(buf, 0, count);
}
out.close;
in.close;

最佳答案

您可以在 headless 环境中安全地使用 BufferedImageRasterDataBufferImageIO 等类。不能在 headless 模式下使用的类和方法通常标记为:

@throws HeadlessException if GraphicsEnvironment.isHeadless() returns true.

这通常包括 Swing 和 AWT 组件,如窗口、按钮等。例如,请参见 usages of HeadlessException了解具有此限制的方法和类的列表。

现在您知道了这一点,您所要做的就是使用 setRGB(...) 方法将“原始”RGB 字节获取到 BufferedImage 中,或直接访问 DataBuffer 的后备数组。关于此问题的多个问答已经在 SO 上提供(谷歌搜索“从字节创建 BufferedImage”)。

@rayryeng 当然是正确的,因为您需要知道图像的像素布局和宽度/高度,才能重建它。如果其他开发人员可以以已知格式(例如 PNG 或类似格式)向您发送图像,这对您来说可能会更容易。

准备好 BufferedImage 后,使用 ImageIO 将图像写入 servlet 输出流,如下所示:

OutputStream out = ...; // the servlet or socket output stream
BufferedImage image = ...; // the image you just created

if (!ImageIO.write(image, "PNG", out)) {
log.warn("Could not write image...");
}

关于java - 如何在 Java 中获取字节并从中生成图像文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25453916/

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