首页 > 代码库 > 网上找的挺不错的图片压缩代码

网上找的挺不错的图片压缩代码

package test.yc.com.fragmentdemo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.util.Base64;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Created by uctimes on 2016/10/22.
 */
public class BitMapUtils {

    //计算图片的缩放值
    public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {
            final int heightRatio = Math.round((float) height/ (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }
        return inSampleSize;
    }


    // 根据路径获得图片并压缩,返回bitmap用于显示
    public static Bitmap getSmallBitmap(String filePath) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, 480, 800);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;

        return BitmapFactory.decodeFile(filePath, options);
    }

    //把bitmap转换成String
    public static String bitmapToString(String filePath) {

        Bitmap bm = getSmallBitmap(filePath);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG, 40, baos);
        byte[] b = baos.toByteArray();
        return Base64.encodeToString(b, Base64.DEFAULT);
    }


//    /*
//压缩图片,处理某些手机拍照角度旋转的问题
//*/
//    public static String compressImage(Context context, String filePath, String fileName, int q) throws FileNotFoundException {
//
//        Bitmap bm = getSmallBitmap(filePath);
//
//        int degree = readPictureDegree(filePath);
//
//        if(degree!=0){//旋转照片角度
//            bm=rotateBitmap(bm,degree);
//        }
//
//        File imageDir = SDCardUtils.getImageDir(context);
//
//        File outputFile=new File(imageDir,fileName);
//
//        FileOutputStream out = new FileOutputStream(outputFile);
//
//        bm.compress(Bitmap.CompressFormat.JPEG, q, out);
//
//        return outputFile.getPath();
//    }
//
//    //判断照片角度
//    public static int readPictureDegree(String path) {
//        int degree = 0;
//        try {
//            ExifInterface exifInterface = new ExifInterface(path);
//            int orientation = exifInterface.getAttributeInt(
//                    ExifInterface.TAG_ORIENTATION,
//                    ExifInterface.ORIENTATION_NORMAL);
//            switch (orientation) {
//                case ExifInterface.ORIENTATION_ROTATE_90:
//                    degree = 90;
//                    break;
//                case ExifInterface.ORIENTATION_ROTATE_180:
//                    degree = 180;
//                    break;
//                case ExifInterface.ORIENTATION_ROTATE_270:
//                    degree = 270;
//                    break;
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return degree;
//    }
////旋转照片
//    public static Bitmap rotateBitmap(Bitmap bitmap,int degress) {
//        if (bitmap != null) {
//            Matrix m = new Matrix();
//            m.postRotate(degress);
//            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
//                    bitmap.getHeight(), m, true);
//            return bitmap;
//        }
//        return bitmap;
//    }
}

 

网上找的挺不错的图片压缩代码