ImageIO
低层图片容器 I/O:读取 EXIF / GPS / TIFF / IPTC 元数据,并把图片编码成 UIImage.toPNGData / toJPEGData 产不出的格式(以及带嵌入元数据)。
为什么不直接用
UIImage?UIImage是解码后的 bitmap——拿到它的时候原文件的元数据(EXIF、GPS......)已经丢了,而且toPNGData/toJPEGData写不了 HEIC / TIFF / GIF。ImageIO工作在编码容器层,所以既能读出原有元数据,也能把元数据写回。
ImageIO.readMetadata(source)
从文件路径或 Data 读取容器级元数据。源无法解码为图片时 reject。
exif / gps / tiff / iptc 这几个字典原样沿用 Apple 的 CGImageProperties 键名(gps.Latitude、exif.DateTimeOriginal ......)。
ImageIO.writeImage(options)
把图片编码写到 to。image 与 source 二选一:
给照片打 GPS 标但保留原 EXIF
用 source 变体——经过 UIImage 重新编码会丢掉原 EXIF:
注意事项
image会丢原元数据。UIImage是解码后的 bitmap。要保留文件原有 EXIF/GPS,请用source变体而不是image。quality只对 jpeg / heic 生效,png / tiff / gif 忽略。- HEIC 编码 需要设备/模拟器支持 HEVC 图片编码器;老模拟器上 HEIC 可能失败——若
writeImagereject 可降级到 jpeg。 - 键名是原始 CGImageProperties 键。 写
exif/gps/tiff/iptc时用 Apple 的键名(如Latitude、LatitudeRef、DateTimeOriginal)。
