获取本地照片和拍照上传并裁剪的实现

来源:互联网 发布:手机cad画图软件 编辑:程序博客网 时间:2024/04/30 03:48
// 获取照片方法public void showPhtoes() {String[] s = { "照相", "从照册取出", "取消" };Builder builder = new Builder(this);builder.setItems(s, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {switch (which) {case 0:// if (SDcardUtil.isExistsSdcard()) {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")));startActivityForResult(intent,Constants.IntentRequestCodes.PHOTOINTENTREQUESTCODE);// } else {// Alert.displayToastForLengthShort(// SetDetailsinfoManagement.this, "SD卡不存在");// }break;case 1:// if (SDcardUtil.isExistsSdcard()) {Intent intent1 = new Intent(Intent.ACTION_GET_CONTENT, null);intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");startActivityForResult(intent1,Constants.IntentRequestCodes.PHOTOZOOMQUESTCODE);// } else {// Alert.displayToastForLengthShort(// SetDetailsinfoManagement.this, "SD卡不存在");// }break;case 2:break;}}}).create().show();}protected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {// 如果是直接从相册获取case Constants.IntentRequestCodes.PHOTOZOOMQUESTCODE:<span style="white-space:pre"></span>startPhotoZoom(data.getData());break;// 如果是调用相机拍照时case Constants.IntentRequestCodes.PHOTOINTENTREQUESTCODE:File temp = new File(Environment.getExternalStorageDirectory()+ "/temp.jpg");startPhotoZoom(Uri.fromFile(temp));break;// 取得裁剪后的图片case Constants.IntentRequestCodes.PHOTORESOULTQUESTCODE:/*** 非空判断大家一定要验证,如果不验证的话, 在剪裁之后如果发现不满意,要重新裁剪,丢弃* 当前功能时,会报NullException,只 在这个地方加下,大家可以根据不同情况在合适的 地方做判断处理类似情况  */if (data != null) {<span style="white-space:pre"></span>setPicToView(data);}break;case RESULT_CANCELED:return;default:break;}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");intent.putExtra("return-data", true);startActivityForResult(intent,Constants.IntentRequestCodes.PHOTORESOULTQUESTCODE);}/** * 保存裁剪之后的图片数据   *  * @param picdata */private void setPicToView(Intent picdata) {Bundle extras = picdata.getExtras();if (extras != null) {Bitmap photo = extras.getParcelable("data");/** * 下面注释的方法是将裁剪之后的图片以Base64Coder的字符方式上 传到服务器 */String  tp = StringUtil.ConvertByteArrayToBase64(BitmapUtil.bitmap2Bytes(photo));ByteArrayOutputStream stream = new ByteArrayOutputStream();photo.compress(Bitmap.CompressFormat.PNG, 75, stream);// (0 - 100)压缩文件companyview.setImageBitmap(photo);}}

0 0
原创粉丝点击