博客源址:android 照片旋转并保存
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
/*** 读取图片属性:旋转的角度* @param path 图片绝对路径* @return degree旋转的角度*/public 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;}/** 旋转图片* @param angle* @param bitmap* @return Bitmap*/public Bitmap rotaingImageView( int angle , Bitmap bitmap) {// 旋转图片 动作Matrix matrix = new Matrix();matrix.postRotate(angle);// 创建新的图片return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true );}/** ** 将bitmap保存在SD jpeg格式* @param bitmap* * 图片bitmap* @param filePath* 要保存图片路径* @param quality* 压缩质量值*/public void saveImage(Bitmap bitmap, String filePath, int quality) {FileOutputStream fileOutputStream = null ;try {fileOutputStream = new FileOutputStream(filePath);bitmap.compress(CompressFormat.JPEG, quality, fileOutputStream);fileOutputStream.flush(); fileOutputStream.close();// 如果图片还没有回收,强制回收if (!bitmap.isRecycled()) {bitmap.recycle();System.gc();} catch (Exception e) {} }bitmap=ImageCompress.decodeSampledBitmapFromResource(filename, 480, 800);}// 图片旋转int Degree = imageUtils.readPictureDegree(filename);bitmap = imageUtils.rotaingImageView(Degree, bitmap);// 保存图片到SD卡// imageCompress.saveImage(bitmap, filename);imageCompress.saveImage(bitmap, filename,90);
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
/** ** 动态设置inSampleSize 倍数** @param pathName* 图片路径* @param reqWidth* 要压缩的宽度* @param reqHeight* 要压缩的高度* @return*/public static Bitmap decodeSampledBitmapFromResource(String pathName,int reqWidth, int reqHeight) {// 首先设置 inJustDecodeBounds=true 来获取图片尺寸final BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true ;BitmapFactory.decodeFile(pathName, options);// 计算 inSampleSize 的值options.inSampleSize = calculateInSampleSize(options, reqWidth,reqHeight);// 根据计算出的 inSampleSize 来解码图片生成Bitmapoptions.inJustDecodeBounds = false ;return BitmapFactory.decodeFile(pathName, options);}