关于存储图片Exif数据获取及缩放后变化的技术咨询
关于存储图片Exif数据获取及缩放后变化的技术咨询
嗨,我来帮你理清这两个问题~
一、缩放图片后Exif数据会变化吗?
这个得看你用的图片处理工具/API是否保留或修改Exif数据:
- 如果是用Android原生的
BitmapFactory直接解码缩放,默认情况下Bitmap对象是不携带Exif数据的,你把缩放后的Bitmap保存成新文件时,如果没有主动将原始Exif写入新文件,那新文件的Exif就会丢失,或者只有系统自动添加的基础信息(比如分辨率); - 要是用的是支持保留Exif的工具(比如Glide的
diskCacheStrategy配置、第三方压缩库如Compressor,或者手动处理Exif写入),那大部分原始Exif标签(比如你关注的TAG_DIGITAL_ZOOM_RATIO)会被保留,缩放操作本身不会修改这类拍摄时生成的Exif字段——除非工具主动更新了分辨率、图片尺寸相关的Exif标签(比如TAG_IMAGE_WIDTH/TAG_IMAGE_HEIGHT)。
二、为什么你获取TAG_DIGITAL_ZOOM_RATIO返回null?
大概率是这几个原因:
- 原始图片本身就没有这个标签:不是所有照片都会记录数字变焦比,只有拍摄设备在拍摄时启用了数字变焦,并且设备固件支持记录这个字段,图片里才会有
TAG_DIGITAL_ZOOM_RATIO。你可以先拿电脑上的Exif查看工具(比如ExifTool)打开原始图片确认一下; - 图片在之前的流程中丢失了Exif标签:比如图片经过上传、下载、其他工具压缩转码时,Exif数据被清理了;
- Android端的文件权限/初始化方式问题:如果是Android 10及以上用了Scoped Storage,直接通过
File.path初始化ExifInterface可能会因为权限问题无法正确读取Exif,试试用ContentResolver打开输入流来初始化:val inputStream = contentResolver.openInputStream(uri) inputStream?.use { val exifInterface = ExifInterface(it) val zoomRatio = exifInterface.getAttribute(ExifInterface.TAG_DIGITAL_ZOOM_RATIO) // 处理结果 }
给你的小建议
- 先确认原始图片是否真的包含
TAG_DIGITAL_ZOOM_RATIO标签,这是排查的第一步; - 缩放图片要保留Exif的话,记得在保存新文件时手动将原始Exif数据写入,或者用支持保留Exif的第三方库简化操作。
内容来源于stack exchange
相关产品推荐
相关产品推荐

