作者ogre0403 (肚子饿)
看板java
标题[问题] 透过BufferedImage与ImageIO将图转成byte
时间Mon Jul 14 12:24:52 2014
各位先进好,现在在写一个将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://webptt.com/cn.aspx?n=bbs/java/M.1405311895.A.BD1.html
1F:推 Killercat:把image当作file chunk自己处理应该就可以了... 07/14 12:30
2F:→ Killercat:不过这看起来比较像是ImageIO帮你偷动手脚 07/14 12:30
3F:→ Killercat:直接用new File把档案打开做成byte[]试试看 07/14 12:31
4F:推 lovdkkkk:用 bmp 或 png 也会吗? 07/14 13:26
5F:→ ogre0403:感谢K大提醒,用File转byte[]比较单纯 07/14 13:42
6F:推 Killercat:我其实式猜ImageIO.write那里把jpg重新编码一次了 07/14 17:31
7F:→ Killercat:所以我猜原因应该是出在那里... 07/14 17:31
8F:→ danny8376:ImageIO是把图片解把变Bitmap啊 只要复制当然用不到 07/14 22:59