当前位置: 代码迷 >> Android >> android 选择图片 裁剪 拍照 兼容所有版本的代码
  详细解决方案

android 选择图片 裁剪 拍照 兼容所有版本的代码

热度:379   发布时间:2016-04-28 00:32:26.0
android 选择图片 剪裁 拍照 兼容所有版本的代码

   在做项目的时候,总是避免不了头像的剪裁和选取,然而4.4以后 以前能够使用的代码 ,也用不了了。 做下记录吧。因为下面代码我用了几次了。

以后直接复制粘贴。


1.拍照 和选择图片

选择图片

<span style="white-space:pre">			</span>intent = new Intent(Intent.ACTION_GET_CONTENT);			intent.setType("image/*");			startActivityForResult(intent, GALLERY_REQUEST_CODE);



拍照

<span style="white-space:pre">			</span>intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);			startActivityForResult(intent, CAMERA_REQUEST_CODE);

2.获取系统传来的值

标记符

	private static int CAMERA_REQUEST_CODE = 1;	private static int GALLERY_REQUEST_CODE = 2;	private static int CROP_REQUEST_CODE = 3;



	@Override	protected void onActivityResult(int requestCode, int resultCode, Intent data) {		if (requestCode == CAMERA_REQUEST_CODE) {			if (data == null) {				return;			} else { //拍照				Bundle extras = data.getExtras();				if (extras != null) {					Bitmap bm = extras.getParcelable("data");					Uri uri = saveBitmap(bm);					startImageZoom(uri);				}			}		} else if (requestCode == GALLERY_REQUEST_CODE) {			if (data == null) {//相册				return;			}			Uri uri;			uri = data.getData();			Uri fileUri = convertUri(uri);			startImageZoom(fileUri);		} else if (requestCode == CROP_REQUEST_CODE) {			if (data == null) {				return;			}//剪裁后的图片			Bundle extras = data.getExtras();			if (extras == null) {				return;			}			Bitmap bm = extras.getParcelable("data");			ShowImageView(bm);		}	}

图片选取后 根据Url 转成流 并保存


	private Uri convertUri(Uri uri) {		InputStream is = null;		try {			is = getContentResolver().openInputStream(uri);			Bitmap bitmap = BitmapFactory.decodeStream(is);			is.close();			return saveBitmap(bitmap);		} catch (FileNotFoundException e) {			e.printStackTrace();			return null;		} catch (IOException e) {			e.printStackTrace();			return null;		}	}

保存图片  记得加权限 

	private Uri saveBitmap(Bitmap bm) {		File tmpDir = new File(Environment.getExternalStorageDirectory()				+ "/xiaoxin");		if (!tmpDir.exists()) {			tmpDir.mkdir();		}		File img = new File(tmpDir.getAbsolutePath() + "love.png");		try {			FileOutputStream fos = new FileOutputStream(img);			bm.compress(Bitmap.CompressFormat.PNG, 85, fos);			fos.flush();			fos.close();			Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_SHORT).show();			return Uri.fromFile(img);		} catch (FileNotFoundException e) {			Toast.makeText(MainActivity.this, "失敗了", Toast.LENGTH_SHORT).show();			e.printStackTrace();			return null;		} catch (IOException e) {			e.printStackTrace();			Toast.makeText(MainActivity.this, "失敗了", Toast.LENGTH_SHORT).show();			return null;		}	}


3.剪裁图片


	/**	 * 剪裁图片	 * 	 * @param uri	 */	private void startImageZoom(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", 150);		intent.putExtra("outputY", 150);		intent.putExtra("return-data", true);		startActivityForResult(intent, CROP_REQUEST_CODE);	}

4.结束语:

记得加权限哦 ,在剪裁完图片后 会有一个 Bitmap 对象。你可以拿来设置到ImageView上面去。也可以直接传送到服务器去。有问题的话 请留言

  相关解决方案