[英]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;
您可以在無頭環境中安全地使用BufferedImage
, Raster
, DataBuffer
和ImageIO
類的類。 不能在無頭模式下使用的類和方法通常標記為:
@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.