解决相机拍照不清晰,拍照旋转问题!

private Uri uri;

//拍照

Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE"); 

ContentValues values = new ContentValues();  
       values.put(MediaStore.Images.Media.DISPLAY_NAME, String.valueOf(System.currentTimeMillis())+".jpg");  
       values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");  
       uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  
       getImageByCamera.putExtra(MediaStore.Images.Media.ORIENTATION, 0);  
       getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, uri);

startActivityForResult(getImageByCamera,REQUEST_CAMERA);

//获取拍照的图片

if (requestCode == REQUEST_CAMERA) { //相机获取照片
String path = Tool.getPathFromUri(context, uri);
int orientation = Tool.readPictureDegree(path);//获取旋转角度
AppLog.d("dingdongkai", "orientation==="+orientation);
if(Math.abs(orientation) > 0){
Bitmap bit = getBitmapFromUri(uri);
   bitmap =  Tool.rotaingImageView(orientation, bit);//旋转图片  
}  
startPhotoZoom(Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null,null)));

//根据uri获取图片路径

public static String getPathFromUri(Context mContext,Uri contentUri){
AppLog.d("dingdongkai", "contentUri==="+contentUri.toString());
   String[] proj = { MediaStore.Images.Media.DATA };
   CursorLoader loader = new CursorLoader(mContext, contentUri, proj, null, null, null);
   Cursor cursor = loader.loadInBackground();
   int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
   cursor.moveToFirst();
   return cursor.getString(column_index);
}

//获取图片的旋转角度
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;  
}  

/**
 * 裁剪图片方法实现
 * 
 * @param uri
 */
public void startPhotoZoom(Uri uri) {
// 设置裁剪属性
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 320);
intent.putExtra("outputY", 320);
intent.putExtra("return-data", true);
startActivityForResult(intent, 6);
}

原文地址:https://www.cnblogs.com/xrtd/p/4168820.html