有时候我们需要的图片并不适合我们想要的大小, 那么我们就可以用到系统自带的图片裁剪功能, 把规定范围的图像给剪出来。
贴上部分代码:
//调用图库 Intent intent = new Intent(); intent.setType("image/*"); intent.putExtra("crop", "true"); // crop=true 有这句才能出来最后的裁剪页面. intent.putExtra("aspectX", 5); // 这两项为裁剪框的比例. intent.putExtra("aspectY", 4); //输出地址 intent.putExtra("output", Uri.fromFile(new File("SDCard/1.jpg") intent.putExtra("outputFormat", "JPEG");//返回格式
startActivityForResult(Intent.createChooser(intent, "选择图片"), 1);
//调用相机 Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE, null); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File( "SDCard/1.jpg"))); startActivityForResult(intent, 2);
在调用了以上任意一种方法后, 系统会返回onActivityResult, 我们在这个方法中处理就可以了
/** * 获取返回的相片 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == 0) return; if (requestCode == 2)//调用系统裁剪 { File picture = new File("SDCard/1.jpg"); startPhotoZoom(Uri.fromFile(picture)); } else if (requestCode == PHOTO_CODE)//得到裁剪后的图片 { try { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; Bitmap bitmap = BitmapFactory.decodeFile("SDCard/1.jpg", options); if (bitmap != null)//保存图片 { mCacheBitmap = bitmap; FileOutputStream fos = null; fos = new FileOutputStream("SDCard/1.jpg"); mCacheBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); } } catch (Exception e) { // TODO: handle exception } } super.onActivityResult(requestCode, resultCode, data); } /** * 裁剪图片 * @param uri */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true");// crop=true 有这句才能出来最后的裁剪页面. intent.putExtra("aspectX", 5);// 这两项为裁剪框的比例. intent.putExtra("aspectY", 4);// x:y=1:2 intent.putExtra("output", Uri.fromFile(new File("SDCard/1.jpg"))); intent.putExtra("outputFormat", "JPEG");//返回格式 startActivityForResult(intent, PHOTO_CODE); }