在开发中遇到部分手机拍照上传给后台,展示的时候图片出现旋转,通过百度找到两种解决方案:
方式一:当手机拍照结束,在返回结果处理里边跳转一个新的页面,让用户在新的页面李自己手动去旋转图片,然后再上传给服务器。
在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; }