package com.lzy.imagepicker.util; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.media.ExifInterface; import android.net.Uri; import android.provider.MediaStore; import java.io.File; import java.io.IOException; /** * * Bitmap工具类,主要是解决拍照旋转的适配 * * Author: nanchen * Email: [email protected] * Date: 2017-03-20 13:27 */ public class BitmapUtil { private BitmapUtil() { throw new UnsupportedOperationException("u can't instantiate me..."); } /** * 获取图片的旋转角度 * * @param path 图片绝对路径 * @return 图片的旋转角度 */ public static int getBitmapDegree(String path) { int degree = 0; try { // 从指定路径下读取图片,并获取其EXIF信息 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; } /** * 将图片按照指定的角度进行旋转 * * @param bitmap 需要旋转的图片 * @param degree 指定的旋转角度 * @return 旋转后的图片 */ public static Bitmap rotateBitmapByDegree(Bitmap bitmap, int degree) { // 根据旋转角度,生成旋转矩阵 Matrix matrix = new Matrix(); matrix.postRotate(degree); // 将原始图片按照旋转矩阵进行旋转,并得到新的图片 Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); if (!bitmap.isRecycled()) { bitmap.recycle(); } return newBitmap; } /** * 获取我们需要的整理过旋转角度的Uri * @param activity 上下文环境 * @param path 路径 * @return 正常的Uri */ public static Uri getRotatedUri(Activity activity, String path){ int degree = BitmapUtil.getBitmapDegree(path); if (degree != 0){ Bitmap bitmap = BitmapFactory.decodeFile(path); Bitmap newBitmap = BitmapUtil.rotateBitmapByDegree(bitmap,degree); return Uri.parse(MediaStore.Images.Media.insertImage(activity.getContentResolver(),newBitmap,null,null)); }else{ return Uri.fromFile(new File(path)); } } /** * 将图片按照指定的角度进行旋转 * * @param path 需要旋转的图片的路径 * @param degree 指定的旋转角度 * @return 旋转后的图片 */ public static Bitmap rotateBitmapByDegree(String path, int degree) { Bitmap bitmap = BitmapFactory.decodeFile(path); return rotateBitmapByDegree(bitmap,degree); } }