一.选择本地图片进行裁剪编辑
1.使用意图Intent.action.PICK (媒体库列表,选择某项并返回所选数据)
(intent.action.GET_CONTENT 打开的是文件系统(包括视频、音频、图片等)供用户选择数据,并返回所选数据)
Intent mIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(mIntent,ROAD_PICTURE);第二个参数是为了筛选出媒体库里的图片资源文件,
2.通过onActivityResult()方法中返回的data获取选中图片的uri
调用下面方法进行图片的裁剪
private String startPhotoZoom(Uri uri) { try { Log.e("====", "uri = " + uri); SimpleDateFormat sDateFormat = new SimpleDateFormat( "yyyyMMddhhmmss"); String address = sDateFormat.format(new java.util.Date()); if (!FileUtils.isFileExist("")) { FileUtils.createSDDir(""); } imageUrl = FileUtils.SDPATH + address + ".JPEG"; Log.e(TAG,"imageUrl ="+imageUrl); //1.从Uri获得文件路径 Uri imageUri = Uri.fromFile(new File(imageUrl)); //调用以下代码会跳转到Android系统自带的一个图片剪裁页面,点击确定之后就会得到一张图片 final Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); //cropString 发送裁剪信号 intent.putExtra("aspectX", 1); //aspectXintX 方向上的比例 intent.putExtra("aspectY", 1); // aspectYintY 方向上的比例 intent.putExtra("outputX", 480);//outputXint 裁剪区的宽 intent.putExtra("outputY", 480); //outputYint 裁剪区的高 intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", false); intent.putExtra("return-data", false); startActivityForResult(intent, CUT_PHOTO_REQUEST_CODE); return address; } catch (IOException e) { e.printStackTrace(); } return null; } }3.进入系统调用的裁剪界面点确定按键后,可以根据配置生成图片文件
即调用下面代码
if (resultCode == RESULT_OK && null != data) { Bitmap bitmap = ImageCacheUtil.getLoacalBitmap(imageUrl); System.out.println("bitmap = " + bitmap); FileUtils.deleteDir(FileUtils.SDPATH); uploadBitmap = ImageCacheUtil.createFramedPhoto(480, 480, bitmap, (int) (dp * 1.6f)); //480*480 是保存图片的分辨率 FileUtils.saveBitmap(uploadBitmap, picName); File file = new File(FileUtils.SDPATH, picName + ".JPEG"); //获取到这个file 文件后进行网络上传等操作,这里只是显示界面上! if(file ==null){ Log.e(TAG,"file == null");} else if(file != null) { Log.e(TAG,"file != null"); //show_cot_imv.setBackgroundResource(R.mipmap.ic_launcher); //ImageCacheUtil.toRoundBitmap();进行圆角化处理 show_cot_imv.setImageBitmap(ImageCacheUtil.toRoundBitmap(uploadBitmap)); Log.e(TAG,"filedir ="+FileUtils.SDPATH+picName+".JPEG"); /*String fileName =FileUtils.SDPATH+picName+".JPEG" ; Bitmap bm = BitmapFactory.decodeFile(fileName); show_cot_imv.setImageBitmap(bm);*/ } }4.最后得到保存在
FileUtils.SDPATH+picName+".JPEG"路劲下的裁剪图片。
二.通过拍照获取图片进行裁剪
1.使用 MediaStore.ACTION_IMAGE_CAPTURE 启动安装在手机上的摄像头应用程序
直接看代码
try { Intent openCameraIntent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); String sdcardState = Environment.getExternalStorageState(); String sdcardPathDir = android.os.Environment .getExternalStorageDirectory().getPath() + "/tempImage/"; File file = null; if (Environment.MEDIA_MOUNTED.equals(sdcardState)) { // ��sd�����Ƿ���myImage�ļ��� File fileDir = new File(sdcardPathDir); if (!fileDir.exists()) { fileDir.mkdirs(); } // �Ƿ���headImg�ļ� file = new File(sdcardPathDir + System.currentTimeMillis() + ".JPEG"); } if (file != null) { path = file.getPath(); photoUri = Uri.fromFile(file); Log.e("=====", "��ȡ����ͼƬ��ַ ��" + photoUri); openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); startActivityForResult(openCameraIntent, TAKE_PICTURE); } } catch (Exception e) { e.printStackTrace(); }点确定后,onActivityResult()中把photoUri 传递给startPhotoZoom();
接下来的裁剪过程与选择本地图片后的裁剪过程是一致的,这里不再赘述。
下面附上下载链接,点击下载!