[問題] 透過BufferedImage與ImageIO將圖轉成byte

作者: ogre0403 (肚子餓)   2014-07-14 12:24:52
各位先進好,現在在寫一個將image轉成byte array, 再將byte array轉回image的功能。
在網路上找到下述用BufferedImage與ImageIO的方式,可以達到我的需求,
也可以正常顯示,看起來也是同一張圖。
但我發現原始的圖檔和轉換後的圖檔大小不一樣。
由windows的檔案內容進去看,
原先圖檔的資訊為640*480,水平解析度72dpi,垂直解析度72dpi,位元深度24,
解析度單位 2,色彩呈現sRGB,
但產生的檔案資訊為640*480,水平解析度96dpi,垂直解析度96dpi,位元深度24,
沒有其他資訊。猜測是轉換過程中省略了部份資料,
但我希望產生的檔案和原始檔案要完全一樣。請問有辦法達到嗎?
// 轉成byte array
BufferedImage originalImage = ImageIO.read(new File("/D:/IMG_0003.JPG"));
baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos);
baos.flush();
byte[] imageInByte = baos.toByteArray();
//轉回image
BufferedImage img = ImageIO.read(new ByteArrayInputStream(it.next().message()));
File outputfile = new File("d:/result.jpg");
ImageIO.write(img,"jpg",outputfile);
作者: Killercat (殺人貓™)   2014-07-14 12:30:00
把image當作file chunk自己處理應該就可以了...不過這看起來比較像是ImageIO幫你偷動手腳直接用new File把檔案打開做成byte[]試試看
作者: lovdkkkk (dk)   2014-07-14 13:26:00
用 bmp 或 png 也會嗎?
作者: ogre0403 (肚子餓)   2014-07-14 13:42:00
感謝K大提醒,用File轉byte[]比較單純
作者: Killercat (殺人貓™)   2014-07-14 17:31:00
我其實式猜ImageIO.write那裡把jpg重新編碼一次了所以我猜原因應該是出在那裡...
作者: danny8376 (釣到一隻猴子@_@)   2014-07-14 22:59:00
ImageIO是把圖片解把變Bitmap啊 只要複製當然用不到

Links booklink

Contact Us: admin [ a t ] ucptt.com