Android部分手机拍照上传图片出现角度旋转的问题

在开发中遇到部分手机拍照上传给后台,展示的时候图片出现旋转,通过百度找到两种解决方案:

方式一:当手机拍照结束,在返回结果处理里边跳转一个新的页面,让用户在新的页面李自己手动去旋转图片,然后再上传给服务器。

在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;
   }





猜你喜欢

转载自blog.csdn.net/gqdbk/article/details/80170324