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

看板java作者 (肚子餓)時間11年前 (2014/07/14 12:24), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/1
各位先進好,現在在寫一個將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); -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.110.240.91 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1405311895.A.BD1.html

07/14 12:30, , 1F
把image當作file chunk自己處理應該就可以了...
07/14 12:30, 1F

07/14 12:30, , 2F
不過這看起來比較像是ImageIO幫你偷動手腳
07/14 12:30, 2F

07/14 12:31, , 3F
直接用new File把檔案打開做成byte[]試試看
07/14 12:31, 3F

07/14 13:26, , 4F
用 bmp 或 png 也會嗎?
07/14 13:26, 4F

07/14 13:42, , 5F
感謝K大提醒,用File轉byte[]比較單純
07/14 13:42, 5F

07/14 17:31, , 6F
我其實式猜ImageIO.write那裡把jpg重新編碼一次了
07/14 17:31, 6F

07/14 17:31, , 7F
所以我猜原因應該是出在那裡...
07/14 17:31, 7F

07/14 22:59, , 8F
ImageIO是把圖片解把變Bitmap啊 只要複製當然用不到
07/14 22:59, 8F
文章代碼(AID): #1JmrkNlH (java)
文章代碼(AID): #1JmrkNlH (java)