android拍照裁剪得到大图

来源:互联网 发布:javascript api 下载 编辑:程序博客网 时间:2024/05/18 02:31

http://blog.csdn.net/floodingfire/article/details/8144604

在项目中技师端要上传健康证,用户端要点击空间查看健康证,由于上传时

/* * 从相册获取 */public void gallery() {// 激活系统图库,选择一张图片Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERYstartActivityForResult(intent, PHOTO_REQUEST_GALLERY);}/* * 从相机获取 */public void camera() {// 激活相机Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");// 判断存储卡是否可以用,可用进行存储if (hasSdcard()) {tempFile = new File(Environment.getExternalStorageDirectory(),PHOTO_FILE_NAME);// 从文件中创建uriUri uri = Uri.fromFile(tempFile);intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);}// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMAstartActivityForResult(intent, PHOTO_REQUEST_CAREMA);}/* * 剪切图片 */private void crop(Uri uri) {// 裁剪图片意图Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");intent.putExtra("crop", "true");// 裁剪框的比例,1:1intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// 裁剪后输出图片的尺寸大小intent.putExtra("outputX", 250);intent.putExtra("outputY", 250);intent.putExtra("outputFormat", "JPEG");// 图片格式intent.putExtra("noFaceDetection", true);// 取消人脸识别intent.putExtra("return-data", true);// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUTstartActivityForResult(intent, PHOTO_REQUEST_CUT);}/* * 判断sdcard是否被挂载 */private boolean hasSdcard() {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {return true;} else {return false;}}@SuppressLint("NewApi")@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == PHOTO_REQUEST_GALLERY) {if (data==null) {return;}// 从相册返回的数据if (data != null) {// 得到图片的全路径Uri uri = data.getData();crop(uri);}} else if (requestCode == PHOTO_REQUEST_CAREMA) {// 从相机返回的数据if (hasSdcard()) {crop(Uri.fromFile(tempFile));} else {Toast.makeText(ChangeInfoActivity.this, "未找到存储卡,无法存储照片!", 0).show();}} else if (requestCode == PHOTO_REQUEST_CUT) {// 从剪切图片返回的数据if (data != null) {bitmap = data.getParcelableExtra("data");Log.d("rr", bitmap.getHeight()*bitmap.getWidth()/1024+"........"+bitmap.getHeight()*bitmap.getRowBytes()+"   "+bitmap.getHeight());if (bitmap==null) {return;}file=BitmapUtils.bitmapToFile(bitmap, getFilesDir() + "img.png");Log.d("rr", "图片大小:"+bitmap.getHeight()*bitmap.getRowBytes()/1024+"");this.headImg.setImageBitmap(bitmap);}try {// 将临时文件删除tempFile.delete();} catch (Exception e) {e.printStackTrace();}}super.onActivityResult(requestCode, resultCode, data);}

把图片数据放在了data里面系统考虑内存问题返回给我们的是缩略图,所以但用户端查看时图片特别模糊

我们可以通过URL得到大图

private static final String PHOTO_FILE_NAME = "temp_photo.jpg";private File tempFile, file;private Uri imageUri;


/* * 从相册获取 */public void gallery() {// 激活系统图库,选择一张图片Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERYstartActivityForResult(intent, PHOTO_REQUEST_GALLERY);}/* * 从相机获取 */public void camera() {// 激活相机Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");// 判断存储卡是否可以用,可用进行存储if (hasSdcard()) {tempFile = new File(Environment.getExternalStorageDirectory(), PHOTO_FILE_NAME);// 从文件中创建uriUri uri = Uri.fromFile(tempFile);intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);}// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMAstartActivityForResult(intent, PHOTO_REQUEST_CAREMA);}/* * 剪切图片 */private void crop(Uri uri) {Log.d("rr", "url:" + uri.toString());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", 350);intent.putExtra("outputY", 350);intent.putExtra("scale", true);intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);intent.putExtra("return-data", false);intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());intent.putExtra("noFaceDetection", true);// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUTstartActivityForResult(intent, PHOTO_REQUEST_CUT);}/* * 判断sdcard是否被挂载 */private boolean hasSdcard() {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {return true;} else {return false;}}@SuppressLint("NewApi")@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == PHOTO_REQUEST_GALLERY) {if (data == null) {return;}// 从相册返回的数据if (data != null) {// 得到图片的全路径imageUri = data.getData();crop(imageUri);}} else if (requestCode == PHOTO_REQUEST_CAREMA) {// 从相机返回的数据if (hasSdcard()) {imageUri = Uri.fromFile(tempFile);crop(imageUri);} else {Toast.makeText(HealthActivity.this, "未找到存储卡,无法存储照片!", 0).show();}} else if (requestCode == PHOTO_REQUEST_CUT) {// 从剪切图片返回的数据if (data != null) {Log.d("rr", "CROP_BIG_PICTURE: data = " + data);// it seems toif (imageUri != null) {Bitmap bitmap = decodeUriAsBitmap(imageUri);file = BitmapUtils.bitmapToFile(bitmap, getFilesDir() + "img.png");Log.d("rr", bitmap.getHeight()*bitmap.getWidth()/1024+"........"+bitmap.getHeight()*bitmap.getRowBytes()+"   宽:"+bitmap.getHeight());Log.d("ee", "图片大小:" + bitmap.getHeight() * bitmap.getRowBytes() / 1024 + "");this.rightImge.setImageBitmap(bitmap);}}try {// 将临时文件删除tempFile.delete();} catch (Exception e) {e.printStackTrace();}}super.onActivityResult(requestCode, resultCode, data);}private Bitmap decodeUriAsBitmap(Uri uri) {Bitmap bitmap = null;try {bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));} catch (FileNotFoundException e) {e.printStackTrace();return null;}return bitmap;}


0 0