图片压缩存储空间

/**
    * @Title: compressPicByQuality 
    * @Description: 压缩图片,通过压缩图片质量,保持原图大小
    * @param  quality:0-1
    * @return byte[] 
    * @throws
    */
    public static byte[] compressPicByQuality(File file, float quality) {
        byte[] inByte = null;
        try {
            BufferedImage image = ImageIO.read(file);
    
            // 如果图片空,返回空
            if (image == null) {
                return null;
            } 
            // 得到指定Format图片的writer
            Iterator<ImageWriter> iter = ImageIO
            .getImageWritersByFormatName("jpeg");// 得到迭代器
            ImageWriter writer = (ImageWriter) iter.next(); // 得到writer
    
            // 得到指定writer的输出参数设置(ImageWriteParam )
            ImageWriteParam iwp = writer.getDefaultWriteParam();
            iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // 设置可否压缩
            iwp.setCompressionQuality(quality); // 设置压缩质量参数
    
            iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);
    
            ColorModel colorModel = ColorModel.getRGBdefault();
            // 指定压缩时使用的色彩模式
            iwp.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel,
            colorModel.createCompatibleSampleModel(16, 16)));
    
            // 开始打包图片,写入byte[]
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // 取得内存输出流
            IIOImage iIamge = new IIOImage(image, null, null);
    
            // 此处因为ImageWriter中用来接收write信息的output要求必须是ImageOutput
            // 通过ImageIo中的静态方法,得到byteArrayOutputStream的ImageOutput
            writer.setOutput(ImageIO
            .createImageOutputStream(byteArrayOutputStream));
            writer.write(null, iIamge, iwp);
            inByte = byteArrayOutputStream.toByteArray();
        } catch (IOException e) {
            System.out.println("write errro");
            e.printStackTrace();
        }
        return inByte;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章