android 照片旋转并保存

博客源址android 照片旋转并保存

博客时间2015-05-15 09:58

复制代码
   
   
/**
* 读取图片属性:旋转的角度
* @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);
复制代码
View Code

 

复制代码
   
   
/** *
* 动态设置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);
}
复制代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值