java进行jpeg压缩和解析(不使用com.sun.image包) 博客分类: java总结 javajpeg
程序员文章站
2024-02-15 13:27:04
...
前段时间准备写一个桌面监控的软件,BufferedImage直接输出数据量比较庞大,而jpg的压缩方法是最快的方式。
但是在网上查得的压缩jpeg图片方法都用到了com.sun.image包,而这个包很容易引起eclipse报错的问题,虽然可以修改eclipse设置来规避,不过也会出现持续报错,甚至会无法import相关的class的问题
实际上java已经有一个javax.imageio包已经可以处理jpeg的图片数据了。
经过查看源码和在网上查询相关资料,已经成功实现相关功能。没有报错风险。
以下贴出代码,暂时使用内存I/O流,其他方式自行引申
编码:
解析:
但是在网上查得的压缩jpeg图片方法都用到了com.sun.image包,而这个包很容易引起eclipse报错的问题,虽然可以修改eclipse设置来规避,不过也会出现持续报错,甚至会无法import相关的class的问题
实际上java已经有一个javax.imageio包已经可以处理jpeg的图片数据了。
经过查看源码和在网上查询相关资料,已经成功实现相关功能。没有报错风险。
以下贴出代码,暂时使用内存I/O流,其他方式自行引申
编码:
/*传入一个BufferedImage对象,输出jpeg编码后的图片byte[]便于传输*/ public static byte[] encodeJPEG(BufferedImage img) { //将数据放入内存输出流便于转化 ByteArrayOutputStream out = new ByteArrayOutputStream(); try { //创建图片输出数据流 ImageOutputStream ious = ImageIO.createImageOutputStream(out); //将图片输出为jpeg ImageIO.write(img, "JPEG", ious); //关闭输出流 ious.close(); byte[] bs = out.toByteArray(); out.close(); return bs; } catch (IOException e) { e.printStackTrace(); } return null; }
解析:
public static BufferedImage decodeJPEG(byte[] b) { ByteArrayInputStream in = new ByteArrayInputStream(b); try { ImageInputStream iins = ImageIO.createImageInputStream(in); BufferedImage img = ImageIO.read(iins); in.close(); return img; } catch (IOException e) { e.printStackTrace(); } return null; }