场景:Android 应用选择图片时,glide.with 加载某些图片,图片看不了,识别不了。应用 sdk 版本是30,改到 29 就能识别图片了。
个人分析:看了报错是加载图片时,exifinterface 解析图片时解析错误,这表明图片的 exif 信息解析出错,就是说图片的 exif 信息破损了。淘宝、京东也不能识别这张图片。
疑问:但是小红书,微信,qq 能识别图片,看了这些应用的 sdk 版本都是30 以上的,他们是用的什么识别方案呢。
Android 应用 glide 加载不了部分图片
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
7条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在处理类似的问题时,我们可以从以下几个方面进行排查和解决:
-
检查 ExifInterface 的兼容性: Glide 使用
ExifInterface
来读取图片的元数据,包括方向等信息。确保你使用的 Glide 版本与 Android SDK 30 兼容。Glide 自 4.8.0 版本开始支持 Android Q(API 级别 29),所以如果你使用的是较旧版本的 Glide,可能需要更新到最新版。更新 Glide 到最新版本(例如 4.12.0):
implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
-
排除 Glide 的影响: 可以尝试不使用 Glide,而是直接使用
BitmapFactory.decodeStream()
来加载图片,看看是否可以正常显示。如果这个方法可以加载图片,那么问题就可能在于 Glide 的配置或兼容性上。示例代码:
try { InputStream inputStream = new FileInputStream(imagePath); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); imageView.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); }
-
使用第三方库修复 Exif 数据: 如果图片的 EXIF 数据确实存在问题,你可以考虑使用像
ExifUtil
这样的库来修复它。这里有一个示例库:https://github.com/darsh2506/ExifUtil首先,将库添加到你的
build.gradle
文件中:implementation 'com.darsh.exifutil:exif-util:1.0.1'
然后使用修复后的图片进行加载:
File file = new File(imagePath); ExifUtil exifUtil = new ExifUtil(file); byte[] fixedBytes = exifUtil.getFixedImageBytes(); // 使用 Glide 加载修复后的图片 Glide.with(context) .asBitmap() .load(new ByteArrayInputStream(fixedBytes)) .into(imageView);
-
使用其他图像加载库: 如果上述方法都无法解决问题,你可以尝试替换为其他的图像加载库,比如 Picasso 或 Fresco,看看它们是否能正确加载这些图片。
添加 Picasso 到项目:
implementation 'com.squareup.picasso:picasso:2.71828'
使用 Picasso 加载图片:
Picasso.get().load(imagePath).into(imageView);
-
联系图片提供方: 如果以上所有方法都无效,可能是图片本身就有问题。建议联系图片的提供方,确认他们是否有提供适用于 Android 11+ 的图片格式或优化过 EXIF 数据。
通过这些步骤,你应该能找到导致图片加载失败的原因,并找到相应的解决方案。
解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥15 地图软件开发技术答疑(api, 地点获取,外观样式)
- ¥20 物理远程控制麦克风使用问题
- ¥15 打印预览会泄漏纸钱包密码吗
- ¥15 在hololens1上运行unity项目只有空窗口
- ¥25 TABLEAU PREP无法打开
- ¥15 百度帐号问题/centos
- ¥15 关于#c语言#的问题:求完整代码条件好说
- ¥100 HALCON DELPHI
- ¥15 (需要远程,AI不回)VB6二进制文件转换成功,但是C#转换总是失败
- ¥15 关于#matlab#的问题:有没有什么其他办法能够保证不退出进程(相关搜索:matlab调用)