1、从本地相册拿取图片路径:
Intent intentPick = new Intent(Intent.ACTION_PICK);
intentPick.setType("image/*");
activity.startActivityForResult(intentPick, CODE_ACTIVITY_REQUEST_GALLERY);
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
//从相册选择回来
case ImageUtility.CODE_ACTIVITY_REQUEST_GALLERY:
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
//拿取图片的uri
Uri uri = data.getData();
//将uri转化为真实的本地图片路径
String path = ImageUtility.getImagePathFromUri(PersonInfoActivity.this, uri);
}
}
break;
/**
* 从Uri获取真实图片路径
*
* @param context 应用环境变量
* @param uri 图片Uri
* @return 图片路径
*/
public static String getImagePathFromUri(Context context, Uri uri) {
ContentResolver contentResolver = context.getContentResolver();
String path = "";
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
if (cursor != null) {
int indexColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
path = cursor.getString(indexColumn);
}
cursor.close();
}
return path;
}
2、拍照获得新拍的照片路径:
Intent intentCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intentCapture.putExtra(MediaStore.EXTRA_OUTPUT, getCameraUri());
intentCapture.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
activity.startActivityForResult(intentCapture, CODE_ACTIVITY_REQUEST_CAMERA);
/**
* 获取拍照照片路径
*
* @return 照片路径Uri
*/
public static Uri getCameraUri() {
// 将拍照文件保存在系统默认拍照路径下
File fileDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/Camera");
if (!fileDir.exists()) {
fileDir.mkdir();
}
File file = new File(fileDir, getCameraPhotoName());
Uri uri = Uri.fromFile(file);
mCameraPhotoPathUri = uri;
return uri;
}
/**
* 获取拍照文件名称
*
* @return 照片文件名称
*/
private static String getCameraPhotoName() {
StringBuffer sb = new StringBuffer(PHOTO_FILE_NAME_FONT);
sb.append(System.currentTimeMillis());
sb.append(".jpg");
return sb.toString();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case ImageUtility.CODE_ACTIVITY_REQUEST_CAMERA:
if (resultCode == Activity.RESULT_OK) {
//拿取照片的uri,是启动照相界面时自己手动指定的路径
Uri uriCameraImage = ImageUtility.mCameraPhotoPathUri;
String path = uriCameraImage.getPath();
}
break;
3、获得裁剪后的图片的路径
/**
* 图片裁剪
*
* @param activity 调用者界面
* @param path 文件路径
*/
public static void cropImage(Activity activity, String path) {
Intent intent = new Intent();
intent.setAction("com.android.camera.action.CROP");
intent.putExtra("crop", true);
intent.putExtra("scale", true);
// 设置源文件URI与类型
intent.setDataAndType(Uri.fromFile(new File(path)), "image/*");
// 设置裁剪框比
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 设置输出尺寸,150*150
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
// 设置是否输出Bitmap。若不设置,则需指定输出URI
intent.putExtra("return-data", false);
// 设置输出格式
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
// 人脸识别
intent.putExtra("noFaceDetection", false);
// 设置输出路径,为默认URI
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(getCachePath(NAME_FILE_AVATAR))));
activity.startActivityForResult(intent, CODE_ACTIVITY_REQUEST_CROP);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case ImageUtility.CODE_ACTIVITY_REQUEST_CROP:
//如果你裁剪了图片
if (resultCode == Activity.RESULT_OK) {
//裁剪完成图片的本地路径,例如“/storage/emulated/0/HomePlus/Cache/ic_avatar.jpeg”(是在裁剪方法里自己手动指定的)
String pathAvatar = ImageUtility.getCachePath(ImageUtility.NAME_FILE_AVATAR);
}
break;