圖片壓縮存儲空間

/**
    * @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;
    }

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