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圖的寬高不一致,導致壓縮誤差! |
bitmap 將圖片壓縮到指定的大小
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.