bitmap 將圖片壓縮到指定的大小


private void imageZoom() {
                //圖片允許最大空間   單位:KB
                double maxSize =400.00;
                //將bitmap放至數組中,意在bitmap的大小(與實際讀取的原文件要大)  
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitMap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                byte[] b = baos.toByteArray();
                //將字節換成KB
                double mid = b.length/1024;
                //判斷bitmap佔用空間是否大於允許最大空間  如果大於則壓縮 小於則不壓縮
                if (mid > maxSize) {
                        //獲取bitmap大小 是允許最大大小的多少倍
                        double i = mid / maxSize;
                        //開始壓縮  此處用到平方根 將寬帶和高度壓縮掉對應的平方根倍 (1.保持刻度和高度和原bitmap比率一致,壓縮後也達到了最大大小佔用空間的大小)
                        bitMap = zoomImage(bitMap, bitMap.getWidth() / Math.sqrt(i),
                                        bitMap.getHeight() / Math.sqrt(i));
                }
        }



/***
         * 圖片的縮放方法
         * 
         * @param bgimage
         *            :源圖片資源
         * @param newWidth
         *            :縮放後寬度
         * @param newHeight
         *            :縮放後高度
         * @return
         */
        public static Bitmap zoomImage(Bitmap bgimage, double newWidth,
                        double newHeight) {
                // 獲取這個圖片的寬和高
                float width = bgimage.getWidth();
                float height = bgimage.getHeight();
                // 創建操作圖片用的matrix對象
                Matrix matrix = new Matrix();
                // 計算寬高縮放率
                float scaleWidth = ((float) newWidth) / width;
                float scaleHeight = ((float) newHeight) / height;
                // 縮放圖片動作
                matrix.postScale(scaleWidth, scaleHeight);
                Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
                                (int) height, matrix, true);
                return bitmap;
        }

壓縮後的圖片比預期要大10%  原因可能是bitmap圖的寬高不一致,導致壓縮誤差!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章