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

xiaoxiao2021-02-28  90

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

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

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

转载请注明原文地址: https://www.6miu.com/read-2614023.html

最新回复(0)