查看的媒体图片未包含地理位置信息
问题现象
使用只读模式打开图片后,解析图片无法获取图片中的地理位置信息。
问题原因
为了保护用户图片中的隐私信息,应用在读取图片时,Media Library Kit(媒体文件管理服务)会对图片进行脱敏(抹除图片EXIF中敏感字段信息)处理,因此在图片使用过程中会出现地理位置丢失的情况。
注意:
脱敏处理仅针对图片,视频不提供脱敏能力。
解决措施
应用申请ohos.permissions.MEDIA_LOCATION权限后,应用的脱敏级别变为不进行脱敏,应用即可正常获取图片所有敏感信息。
示例
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { dataSharePredicates } from '@kit.ArkData';
import { common } from '@kit.AbilityKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { image } from '@kit.ImageKit';
@Entry({ routeName : 'Scene1' })
@Component
export struct Scene1 {
@State latitude: string = '';
build() {
NavDestination() {
Column({ space: 20 }) {
Button('example')
.width('80%')
.height(50)
.fontSize(16)
.onClick(async () => {
let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext;
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
this.latitude = await example(phAccessHelper, context);
})
}
.width('100%')
.height('100%')
}
.title('Get from Media Library')
}
}
async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context): Promise<string> {
try {
// 获取图片URI。
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let fetchOption: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: predicates
};
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> =
await phAccessHelper.getAssets(fetchOption);
let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
// 通过图片URI打开图片。
let file: fs.File = fs.openSync(photoAsset.uri, fs.OpenMode.READ_ONLY);
const imageSourceObj = image.createImageSource(file.fd);
console.info("getImagePropertySync");
// 获取图片中的纬度信息。
let latitude = imageSourceObj.getImagePropertySync(image.PropertyKey.GPS_LATITUDE);
return latitude;
} catch (err) {
console.error(`get latitude failed with error: ${err.code}, ${err.message}`);
return `get latitude failed with error: ${err.code}, ${err.message}`;
}
}
附录
地理位置信息字段说明,具体字段说明和使用方式请参考Image Kit中的PropertyKey。
| 名称 | 说明 |
|---|---|
| GPSLatitude | 图片纬度。 |
| GPSLongitude | 图片经度。 |
| GPSTimeStamp | GPS时间戳。 |
| GPSDateStamp | GPS日期戳。 |
| GPSAltitude | 基于GPSAltitudeRef的高度。 |
| GPSVersionID | GPS信息版本号。 |