在开发中遇到部分手机拍照上传给后台,展示的时候图片出现旋转,通过百度找到两种解决方案:
方式一:当手机拍照结束,在返回结果处理里边跳转一个新的页面,让用户在新的页面李自己手动去旋转图片,然后再上传给服务器。
在onActivityResult里边处理跳转:
Intent intent = new Intent(SendMicoBlog.this, RotaingActivity.class);
MyApp myApp = (MyApp)getApplication();
myApp.setName(bitmap);//修改之后的名称
myApp.setPhoto(isPhoto);
startActivityForResult(intent, 1);
然后在新跳转的页面做图片旋转处理:
//获取bitmap
MyApp myApp = (MyApp)getApplication();
bitmap = myApp.getName();
myBitmap = bitmap;
myWidth = bitmap.getWidth();
myHeight = bitmap.getHeight();
// 创建操作图片用的matrix对象
matrix = new Matrix();
Drawable drawable = ImageDispose.bitmapToDrawable(bitmap);
imageView.setBackgroundDrawable(drawable);
btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
RotaingActivity.this.finish();
}
});
btnRightRotaing.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myBitmap = rotaingImageView(-90);
}
});
btnLeftRotaing.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myBitmap = rotaingImageView(+90);
}
});
btnOK.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyApp myApp = (MyApp)getApplication();
myApp.setName(myBitmap);//修改之后
System.out.println("OK resultcoder");
Intent intent = new Intent(RotaingActivity.this, SendMicoBlog.class);
setResult(6, intent);
RotaingActivity.this.finish();
}
});
}
private Bitmap rotaingImageView(int angle2) {
//旋转图片 动作
matrix.postRotate(angle2);
System.out.println("angle2=" + angle2);
// 创建新的图片
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
myWidth, myHeight, matrix, true);
Drawable drawable = ImageDispose.bitmapToDrawable(resizedBitmap);
imageView.setBackgroundDrawable(drawable);
return resizedBitmap;
}、
方式二:拍照获取图片后,我们自己把图片进行处理
1、获取图片旋转角度
int
degree = ImageDispose.readPictureDegree(file.getAbsolutePath());
工具:
/**
* 读取图片属性:旋转的角度
* @param path 图片绝对路径
* @return degree旋转的角度
*/
public
static
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;
}
2、把图片旋转为正方向
bitmap = ImageDispose.rotaingImageView(degree, bitmap);
工具:
* 旋转图片
* @param angle
* @param bitmap
* @return Bitmap
*/
public
static
Bitmap rotaingImageView(
int
angle , Bitmap bitmap) {
//旋转图片 动作
Matrix matrix =
new
Matrix();;
matrix.postRotate(angle);
System.out.println(
"angle2="
+ angle);
// 创建新的图片
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap,
0
,
0
,
bitmap.getWidth(), bitmap.getHeight(), matrix,
true
);
return
resizedBitmap;
}