android调用系统相机/相册并裁剪源码
时间: 2023-08-17 17:02:32 浏览: 136
Android调用系统相机/相册并裁剪源码
5星 · 资源好评率100%
在Android中,要调用系统相机和相册并裁剪图片,需要使用一些系统提供的Intent和API。下面是一个示例的源码,实现了这个功能。
首先,在AndroidManifest.xml文件中添加如下权限:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
然后,在你的Activity中添加如下代码:
```java
private static final int REQUEST_IMAGE_CAPTURE = 1; // 调用相机的请求码
private static final int REQUEST_IMAGE_PICK = 2; // 调用相册的请求码
private static final int REQUEST_IMAGE_CROP = 3; // 调用裁剪的请求码
private Uri imageUri; // 保存相机拍照或相册选择的照片Uri
// 调用系统相机拍照
private void takePicture() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
// 创建临时文件保存拍照的图片
File imageFile = createImageFile();
if (imageFile != null) {
imageUri = FileProvider.getUriForFile(this, "com.example.fileprovider", imageFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
}
}
}
// 调用系统相册选择照片
private void pickPicture() {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "选择图片"), REQUEST_IMAGE_PICK);
}
// 创建临时文件保存拍照的图片
private File createImageFile() {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
String imageFileName = "IMG_" + timeStamp;
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
try {
File imageFile = File.createTempFile(imageFileName, ".jpg", storageDir);
return imageFile;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
// 调用系统裁剪图片
private void cropPicture(Uri sourceUri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(sourceUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 500);
intent.putExtra("outputY", 500);
intent.putExtra("return-data", true);
startActivityForResult(intent, REQUEST_IMAGE_CROP);
}
// 处理相机和相册返回的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case REQUEST_IMAGE_CAPTURE:
cropPicture(imageUri); // 拍照后裁剪图片
break;
case REQUEST_IMAGE_PICK:
cropPicture(data.getData()); // 选择照片后裁剪图片
break;
case REQUEST_IMAGE_CROP:
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap bitmap = extras.getParcelable("data");
// 在这里处理裁剪后的图片
}
break;
}
}
}
```
以上就是调用系统相机和相册并裁剪图片的简单示例代码。你可以根据自己的需求进行修改和扩展。
阅读全文