java进行jpeg压缩和解析(不使用com.sun.image包)

/ Java / 没有评论 / 1936浏览

前段时间准备写一个桌面监控的软件,BufferedImage直接输出数据量比较庞大,而jpg的压缩方法是最快的方式。

但是在网上查得的压缩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;  
}