获取图片资源:相册选择、拍照、裁剪

来源:互联网 发布:菜鸟是什么意思网络 编辑:程序博客网 时间:2024/05/29 10:59

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;
0 0