android 照片旋转并保存
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.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://images.cnblogs.com/OutliningIndicators/ContractedBlock.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 来解码图片生成Bitmap options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(pathName, options); }