捕获/选择图像并返回其类型

时间:2016-01-18 18:24:23

标签: android android-intent

如何让用户在捕获图像或从图库中选择图像之间进行选择,之后我想知道照片的类型(PNG / JPG)。 我正在使用此代码,但效果不佳。

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == getActivity().RESULT_OK) {
            if (requestCode == REQUEST_CAMERA) {
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                mImg.setImageBitmap(photo);
            } else if (requestCode == SELECT_FILE) {
                Uri selectedImageUri = data.getData();
                String[] projection = {MediaStore.MediaColumns.DATA};
                CursorLoader cursorLoader = new CursorLoader(getActivity(), selectedImageUri, projection, null, null,
                        null);
                Cursor cursor = cursorLoader.loadInBackground();
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
                cursor.moveToFirst();

                String selectedImagePath = cursor.getString(column_index);

                Bitmap bm;
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;
                BitmapFactory.decodeFile(selectedImagePath, options);
                final int REQUIRED_SIZE = 200;
                int scale = 1;
                while (options.outWidth / scale / 2 >= REQUIRED_SIZE
                        && options.outHeight / scale / 2 >= REQUIRED_SIZE)
                    scale *= 2;
                options.inSampleSize = scale;
                options.inJustDecodeBounds = false;
                bm = BitmapFactory.decodeFile(selectedImagePath, options);

                mImg.setImageBitmap(bm);
                mImg.setAlpha(1);

            }
}
}

2 个答案:

答案 0 :(得分:1)

  

之后我想知道照片的类型(PNG / JPG)

getType()上致电ContentResolver,传递Uri

  

我使用此代码但效果不佳。

删除您拥有的大部分内容,因为您的selectedImagePath代码在大多数Android设备上都会失败,并且您正在解码主应用程序线程上的位图。使用像an image-loading library这样的Picasso来处理图像加载,异步,包括缩放。毕加索可以直接使用Uri而没有任何有缺陷的selectedImagePath内容。然后,您只需要getType()调用来获取图像的MIME类型。您的整个requestCode == SELECT_FILE块将被2-3行代码替换。

答案 1 :(得分:0)

您必须安装Apache Commons Io 使用此lib

中的FilenameUtils.getExtention()
String ext = FilenameUtils.getExtension("/path/to/file/foo.txt");

我认为这会对你有所帮助