[问题] 透过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