Android 图片压缩并转为Base - ImVeryGood/Loan GitHub Wiki

 /***
     * 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
     * Base64编码处理
     * @param imgFile
     * @return
   */
public static String GetImageStr(String imgFile) {
    Log.d("SSSSSSS", "GetImageStr: "+imgFile);
    InputStream in = null;
    byte[] data = null;
    //读取图片字节数组
    try {
        in = new FileInputStream(imgFile);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //对字节数组Base64编码
    BASE64Encoder encoder = new BASE64Encoder();
    //返回Base64编码过的字节数组字符串
    return "data:image/png;base64," + encoder.encode(data);
}

// 根据路径获得图片并压缩,返回bitmap用于显示
private 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);
}

//计算图片的缩放值
private 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转换成String
public static String bitmapToString(String filePath) {
    Bitmap bm = getSmallBitmap(filePath);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    //1.5M的压缩后在100Kb以内,测试得值,压缩后的大小=94486字节,压缩后的大小=74473字节
    //这里的JPEG 如果换成PNG,那么压缩的就有600kB这样
    bm.compress(Bitmap.CompressFormat.JPEG, 40, baos);
    byte[] b = baos.toByteArray();
    //对字节数组Base64编码
    Log.d("d", "压缩后的大小=" + b.length);
     return "data:image/jpeg;base64," + Base64.encodeToString(b, Base64.DEFAULT);
}