簡體   English   中英

如何用Java提取字節並制作圖像文件?

[英]How do I take bytes and make a image file out of it in Java?

我團隊中的一個人正在計算一個任務,該任務導致RGB字節數組。 該程序在服務器上運行無頭環境,這是否意味着我無法導入任何awt類? 我想使用OutputStream通過HTTP GET將字節發送到瀏覽器。 我都使用保存在服務器硬盤上的PNG文件來工作,但是現在我想使用byte []代替File。

我的代碼現在看起來像這樣,用於讀取文件。 我在使其工作為一個字節[]時遇到麻煩。 我嘗試只向輸出流提供一些隨機字節,但是我從未在瀏覽器中得到圖像。 我知道它看起來不會像文件,但是我希望顯示一些隨機的東西,但是什么也沒做。

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;

您可以在無頭環境中安全地使用BufferedImageRasterDataBufferImageIO類的類。 不能在無頭模式下使用的類和方法通常標記為:

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

這通常包括Swing和AWT組件,例如窗口,按鈕等。請參見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...");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM