使用 edmodo cropper 库检查所选文件是否为图像
Check if selected file using edmodo cropper library is an image or not
当使用内置的 CropImageActivity selecting 图像时,选择器显示来自某些外部应用程序(我的案例是 WPS Office)的 select 文件(任何类型)的选项。因此,当我 select 一个 pdf 文件(比如说)时,onSetImageUriComplete() 不会导致任何错误。
@Override
public void onSetImageUriComplete(CropImageView cropImageView, Uri uri, Exception error) {
progressView.setVisibility(View.INVISIBLE);
if (error != null) {
Log.e(LOG_TAG, "Failed to load image for cropping", error);
AndroidUtils.showToast("Unable to upload", this);
finish();
}
}
对于这种情况,错误不为空。所以,UI 中没有显示任何内容,我也无法知道它是否是图像。
我尝试检查 URI 的扩展名,但在某些型号(我的情况是 One Plus X)中,uri 不一定包含扩展名。
我还尝试将 uri 加载到文件中,然后使用以下代码进行检查:
public static boolean isImage(File file) {
if (file == null || !file.exists()) {
return false;
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file.getPath(), options);
return options.outWidth != -1 && options.outHeight != -1;
}
但是,对于 One Plus X,它再次 returns 错误。有没有其他方法(不是资源密集型的)来检查获取的文件是否是图像?
So, nothing shows up in UI and I don't have any way to know if it is an image or not.
调用getType()
on a ContentResolver
,传入Uri
。如果 MIME 类型以 image/
开头,则它是图像。
当使用内置的 CropImageActivity selecting 图像时,选择器显示来自某些外部应用程序(我的案例是 WPS Office)的 select 文件(任何类型)的选项。因此,当我 select 一个 pdf 文件(比如说)时,onSetImageUriComplete() 不会导致任何错误。
@Override
public void onSetImageUriComplete(CropImageView cropImageView, Uri uri, Exception error) {
progressView.setVisibility(View.INVISIBLE);
if (error != null) {
Log.e(LOG_TAG, "Failed to load image for cropping", error);
AndroidUtils.showToast("Unable to upload", this);
finish();
}
}
对于这种情况,错误不为空。所以,UI 中没有显示任何内容,我也无法知道它是否是图像。
我尝试检查 URI 的扩展名,但在某些型号(我的情况是 One Plus X)中,uri 不一定包含扩展名。
我还尝试将 uri 加载到文件中,然后使用以下代码进行检查:
public static boolean isImage(File file) {
if (file == null || !file.exists()) {
return false;
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file.getPath(), options);
return options.outWidth != -1 && options.outHeight != -1;
}
但是,对于 One Plus X,它再次 returns 错误。有没有其他方法(不是资源密集型的)来检查获取的文件是否是图像?
So, nothing shows up in UI and I don't have any way to know if it is an image or not.
调用getType()
on a ContentResolver
,传入Uri
。如果 MIME 类型以 image/
开头,则它是图像。