调用系统的相机和图库,并裁剪

Posted 楚天千里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用系统的相机和图库,并裁剪相关的知识,希望对你有一定的参考价值。

 1 private static final int PHOTO_REQUEST_TAKEPHOTO = 1;// 拍照
 2     private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择
 3     private static final int PHOTO_REQUEST_CUT = 3;// 结果
 4     private File tempFile = new File(Environment.getExternalStorageDirectory(),
 5             getPhotoFileName());
 6 
 7     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 8         switch (requestCode) {
 9         case PHOTO_REQUEST_TAKEPHOTO:// 当选择拍照时调用
10             startPhotoZoom(Uri.fromFile(tempFile));
11             break;
12         case PHOTO_REQUEST_GALLERY:// 当选择从本地获取图片时
13             // 做非空判断,当我们觉得不满意想重新剪裁的时候便不会报异常,下同
14             if (data != null) {
15                 System.out.println("11================");
16                 startPhotoZoom(data.getData());
17             } else {
18                 System.out.println("================");
19             }
20             break;
21         case PHOTO_REQUEST_CUT:// 返回的结果
22             if (data != null)
23                 // setPicToView(data);
24                 sentPicToNext(data);
25             break;
26         }
27         super.onActivityResult(requestCode, resultCode, data);
28     }
1 // 使用系统当前日期加以调整作为照片的名称
2     private String getPhotoFileName() {
3         Date date = new Date(System.currentTimeMillis());
4         SimpleDateFormat dateFormat = new SimpleDateFormat(
5                 "‘IMG‘_yyyyMMdd_HHmmss");
6         return dateFormat.format(date) + ".jpg";
7     }

调用系统拍照功能:

1 Intent cameraintent = new Intent(
2                                     MediaStore.ACTION_IMAGE_CAPTURE);
3                             // 指定调用相机拍照后照片的储存路径
4                             cameraintent.putExtra(MediaStore.EXTRA_OUTPUT,
5                                     Uri.fromFile(tempFile));
6                             startActivityForResult(cameraintent,
7                                     PHOTO_REQUEST_TAKEPHOTO);

调用系统相册功能: 

1 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);

2 getAlbum.setType("image/*");

3 startActivityForResult(getAlbum, PHOTO_REQUEST_GALLERY); 

调用系统裁剪功能:

 1 private void startPhotoZoom(Uri uri) {
 2         Intent intent = new Intent("com.android.camera.action.CROP");
 3         intent.setDataAndType(uri, "image/*");
 4         // crop为true是设置在开启的intent中设置显示的view可以剪裁
 5         intent.putExtra("crop", "true");
 6 
 7         // aspectX aspectY 是宽高的比例
 8         intent.putExtra("aspectX", 1);
 9         intent.putExtra("aspectY", 1);
10 
11         // outputX,outputY 是剪裁图片的宽高
12         intent.putExtra("outputX", 300);
13         intent.putExtra("outputY", 300);
14         intent.putExtra("return-data", true);
15         intent.putExtra("noFaceDetection", true);
16         System.out.println("22================");
17         startActivityForResult(intent, PHOTO_REQUEST_CUT);
18     }

自定义对话框:

1 mDialog = new AlertDialog.Builder(this, R.style.FullScreenDialog)
2                 .create();
3         if (mDialog != null && !mDialog.isShowing()) {
4             mDialog.show();
5             mDialog.setContentView(R.layout.dialog_select_imge);
6             mDialog.setCanceledOnTouchOutside(false);
7         }

自定义style :

1 <style name="FullScreenDialog" parent="android:style/Theme.Dialog">
2         <item name="android:windowNoTitle">true</item>
3         <item name="android:windowFrame">@null</item>
4         <item name="android:windowIsFloating">true</item>
5         <item name="android:windowIsTranslucent">false</item>
6         <item name="android:background">@android:color/transparent</item>
7         <item name="android:windowBackground">@android:color/transparent</item>
8         <item name="android:backgroundDimEnabled">true</item>
9     </style>

 

以上是关于调用系统的相机和图库,并裁剪的主要内容,如果未能解决你的问题,请参考以下文章

如何从图库和相机中裁剪图像

刚从相机拍摄并通过从图库中挑选显示的Android裁剪图像

Android调用系统相机/相册并裁剪详解

从相机和图库上传在所有版本中都无法正常工作

如何在 Android 7.0 中从相机或图库中选择要裁剪的图像?

调用 android 系统拍照结合 android-crop 裁剪图片