调用Android的相机与图库并进行剪切

	ImageView iv;
	private File file;
	/**
	 * 点击按钮选择照片
	 */
	private void doClick(){
		//图库选图的intent
		Intent intent1 = new Intent(Intent.ACTION_PICK); 
		intent1.setDataAndType(Media.EXTERNAL_CONTENT_URI, "image/*");
		//相机拍照
		Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),System.currentTimeMillis()+".jpg");
		Uri imageUri = Uri.fromFile(file);
		intent2.putExtra(MediaStore.EXTRA_OUTPUT, imageUri );
		
		Intent intent = Intent.createChooser(intent1, "选取头像");
		intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{intent2});
		
		startActivityForResult(intent,101);
	}
	/***
	 * 选择头像后返回的结果
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		try {
			super.onActivityResult(requestCode, resultCode, data);
			if(requestCode==101 && resultCode==RESULT_OK){
				Uri uri = null;
				if(data!=null){
					//图库选图回来
					uri = data.getData();
				}else{
					//拍照回来的
					uri = Uri.fromFile(file);
				}
				
				crop(uri);
			}
			if(requestCode==102 && resultCode==RESULT_OK){
				//安卓的截图程序返回的截图结果
				Bundle bundle = data.getExtras();
				
				Bitmap bitmap = bundle.getParcelable("data");
				
				if(bitmap!=null){
					iv.setImageBitmap(bitmap);
					//上传到服务器,拿到服务器保存头像图片的url
					
					File cropfile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),System.currentTimeMillis()+".jpg");
					bitmap.compress(CompressFormat.JPEG, 100, new FileOutputStream(cropfile));
				}else{
					Toast.makeText(this, "头像截取不成功,请重试", 1).show();
				}
				
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 把uri指向的图片进行截取操作
	 * @param uri
	 */
	private void crop(Uri uri) {
		//发送隐式意图,调用android自带的图片截取界面
		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", 200);
		intent.putExtra("outputY", 200);
		intent.putExtra("return-data", true);
		startActivityForResult(intent, 102);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值