首页 > 代码库 > android 调用系统相机获取图片、调用系统相册获取图片,并对图片进行截取
android 调用系统相机获取图片、调用系统相册获取图片,并对图片进行截取
打开系统相册获取图片并截取,代码相对简单
1 Intent intent = new Intent(Intent.ACTION_GET_CONTENT,null); 2 intent.setType("image/*"); 3 intent.putExtra("crop", "true"); 4 5 //WIDTH 和 HEIGHT指的是截取框的宽高比例,如设WIDTH = 1,HEIGHT = 1,截取框就为正方形 6 intent.putExtra("aspectX", WIDTH); 7 intent.putExtra("aspectY", HEIGHT); 8 9 //OUTPUT_X和OUTPUT_Y指的是图片的宽高,可根据实际需要设值10 intent.putExtra("outputX", OUTPUT_X);11 intent.putExtra("outputY", OUTPUT_Y);12 intent.putExtra("scale", true);13 14 //return-data 指是否在onActivityResult方法中返回数据15 intent.putExtra("return-data", true);16 intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());17 18 intent.putExtra("noFaceDetection", true);19 20 //TO_GALLERY_REQUEST为请求码,可自己设定21 startActivityForResult(intent, TO_GALLERY_REQUEST);
打开系统相机,照相并进行截取
对于相机拍出来的图片,首先把图片保存在SD卡中,并通过保存之后的路径读取并截图
1.打开相机拍照
1 File imageFile = new File(file.getPath()+"/AviationBoss");//获取保存图片的文件夹路径 2 3 //若文件夹不存在,则创建 4 if(!imageFile.exists()){ 5 imageFile.mkdirs(); 6 } 7 8 //获取保存之后的图片路径,默认以当前时间为文件命名 9 imageUri = Uri.fromFile(new File(imageFile, CharacterParser.getDateStr_2(System.currentTimeMillis())+".jpg"));10 11 //打开相机,设置保存路径12 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);13 intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);14 //TO_CAMERA_REQUEST为打开相机的请求码15 startActivityForResult(intent, TO_CAMERA_REQUEST);
2.获取拍照之后的图片,进行截取,首先写个方法
/**该方法是为了截取图片使用*参数 uri为图片的路径*width 和 height为截取框宽高的比例*outputX 和 outputY为图片的宽高*requestCode为截取图片的请求码*/private void toCropImage(Uri uri,int width,int height,int outputX,int outputY,int requestCode){ Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*");//设置图片uri intent.putExtra("crop", "true"); intent.putExtra("aspectX", width); intent.putExtra("aspectY", height); intent.putExtra("outputX", outputX); intent.putExtra("outputY", outputY); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//设置截取完成后保存图片的地址 intent.putExtra("return-data", false);//这里由于是从sd卡直接获取图片,所以不需要通过onActivityResult方法获取数据 intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); startActivityForResult(intent, requestCode); }
3.当拍照完成后,返回到activity的onActivityResult方法,在这里进行判断
1 @Override 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 3 // TODO Auto-generated method stub 4 super.onActivityResult(requestCode, resultCode, data); 5 switch(requestCode){ 6 case TO_CAMERA_REQUEST://拍照后返回的结果 7 //调用CropImage方法进行截取图片 8 toCropImage(imageUri, WIDTH, HEIGHT, OUTPUT_X, OUTPUT_Y, TO_CROP_REQUEST); 9 break;10 case TO_GALLERY_REQUEST://通过系统相册获取到图片并进行截取后的返回值11 if(data!=null){12 Bitmap bitmap =data.getParcelableExtra("data");//通过相册获取到的图片,直接通过data得到13 }14 break;15 case TO_CROP_REQUEST://调用toCropImage方法截取图片后的返回值16 Bitmap bitmap = decodeUriAsBitmap(imageUri);//通过相机拍到的图片,通过图片uri获得17 break;18 }19 }
至此,就可通过两种方式获取图片。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。