首先是打开本地相册选取图片:

Intent albumIntent = new Intent(Intent.ACTION_PICK);//打开系统的相册albumIntent.setType("image/*");startActivityForResult(albumIntent, 0x1004);

选取完图片后在onActivityResult编写取数据的操作:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {        if (data==null) {if (isNull) {}else {     if (requestCode==0x1004) {//从相册选取图片getClipPhotoByPickPicture(data.getData(),data.getExtras());}}}
获得返回数据对图片进行裁剪:

/** * 取得返回的照片信息 * @param uri 传进返回数据的uri * @param bundle 传进返回数据的bundle */private void getClipPhotoByPickPicture(Uri uri, Bundle bundle) {if (uri == null) {/** *  */} else {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");intent.putExtra("crop", "true");intent.putExtra("aspectX", 1);// aspectX是宽高的比例,这里设置的是正方形(长宽比为1:1)intent.putExtra("aspectY", 1);intent.putExtra("outputX", 400); // outputX outputY 是裁剪图片宽高intent.putExtra("outputY", 400); //不知怎么了,我设置不能设太大,<640intent.putExtra("scale", true);intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);intent.putExtra("return-data", true);intent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());intent.putExtra("noFaceDetection", true); startActivityForResult(intent, 0x1006);}}

调用系统相机拍照并裁剪:

 boolean isNull=false;//判断照相机返回数据是否为空       Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");File file = new File(Environment.getExternalStorageDirectory()+ "/Elephant/accountImg/accountImg.jpg");if (file.exists()) {file.delete();}//指定uri存储相片getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(file));isNull = true;startActivityForResult(getImageByCamera, 0x1005);

同样在onActivityResult中编写接收数据,但此时发现,返回的数据为空,此时得多加一个判断:

if (data==null) {if (isNull) {//当返回的data为空,并且isNull为true,说明相机所拍的照片已保存File fileImg = new File(Environment.getExternalStorageDirectory()+ "/Elephant/accountImg/accountImg.jpg");Uri uriFromImg=Uri.fromFile(fileImg);//提取uri//裁剪图片Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uriFromImg, "image/*");intent.putExtra("crop", "true");intent.putExtra("aspectX", 1);// aspectX是宽高的比例,这里设置的是正方形(长宽比为1:1)intent.putExtra("aspectY", 1);intent.putExtra("outputX", 400); // outputX outputY 是裁剪图片宽高intent.putExtra("outputY", 400); //不知怎么了,我设置不能设太大,<640intent.putExtra("scale", true);intent.putExtra(MediaStore.EXTRA_OUTPUT, uriFromImg);intent.putExtra("return-data", true);intent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());intent.putExtra("noFaceDetection", true); // no face detectionstartActivityForResult(intent, 0x1006);Log.d("logd", "uri后面");isNull=false;}}else {//当data!=null}

同样在onActivityResult中编写,让裁剪后的图片显示在imageView上:

if (requestCode == 0x1006) {//接收裁剪好的图片信息并保存到本地文件夹Bitmap bmap = data.getParcelableExtra("data");iv_show_img.setImageBitmap(bmap);// 图像保存到文件中FileOutputStream foutput = null;try {File fileDir = new File(Environment.getExternalStorageDirectory()+ "/Elephant/accountImg/");if (!fileDir.exists()) {fileDir.mkdirs();}File fileImg = new File(fileDir, "accountImg.jpg");if (fileImg.exists()) {fileImg.delete();}foutput = new FileOutputStream(fileImg);bmap.compress(Bitmap.CompressFormat.JPEG, 50, foutput); // 压缩图片} catch (FileNotFoundException e) {e.printStackTrace();} finally {if (null != foutput) {try {foutput.close();} catch (IOException e) {e.printStackTrace();}}}}


参考:

http://blog.csdn.net/beyond0525/article/details/8939984

http://blog.csdn.net/it_transformers/article/details/42060775#comments






更多相关文章

  1. 2016~4.12Android(安卓)之图片处理
  2. android图像绘制(五)——画布保存为图片
  3. Android控制软键盘的现实与隐藏
  4. Android中的ImageView的一些有用的属性
  5. Android(安卓)OOM ,回收布局文件中ImageView占用的内存.Bitmap O
  6. RadioGroup没有文字只显示图片,图片居中问题
  7. Android(安卓)Material Design 中的CorrdinatorLayout使用详解
  8. android 下载图片到本地 sdcard
  9. Android(安卓)ZoomControls放大缩小图片

随机推荐

  1. php设计模式之模板模式实例分析【星际争
  2. q版人物怎么画?q版漫画人物绘画教程
  3. 登录表单、简单后台架构、演示元素样式来
  4. 模态框简单编写
  5. 视口、定位和模态框
  6. android pull解析
  7. Android日历(Calendar,dataPicker)
  8. 浅谈android的selector背景选择器
  9. Android(安卓)本地广播动作
  10. Android(安卓)Handler机制 - handleMessa