HarmonyOS 鸿蒙Next 获取相册图片大小以及视频时长
HarmonyOS 鸿蒙Next 获取相册图片大小以及视频时长
在鸿蒙preview2版本通过asset.get(photoAccessHelper.PhotoKeys.SIZE)以及asset.get(photoAccessHelper.PhotoKeys.DURATION)可以获取大小以及时长,升级到Beta1版本后获取这些信息报错了
2 回复
可以参考如下demo:
import photoAccessHelper from '[@ohos](/user/ohos).file.photoAccessHelper';
import { BusinessError } from '[@ohos](/user/ohos).base';
import dataSharePredicates from '[@ohos](/user/ohos).data.dataSharePredicates';
import { picker } from '[@kit](/user/kit).CoreFileKit';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
// 定义一个uri数组,用于接收PhotoViewPicker选择图片返回的uri
[@State](/user/State) uris: Array<string> = [];
context = getContext(this);
// 调用PhotoViewPicker.select选择图片
async photoPickerGetUri() {
try {
// let PhotoSelectOptions = new picker.PhotoSelectOptions();
// PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
// PhotoSelectOptions.maxSelectNumber = 1;
let photoViewPicker = new picker.PhotoViewPicker();
photoViewPicker.select().then(async (PhotoSelectResult: picker.PhotoSelectResult) => {
console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ' +
JSON.stringify(PhotoSelectResult));
this.uris = PhotoSelectResult.photoUris;
this.uriGetAssets()
}).catch((err: BusinessError) => {
console.error('PhotoViewPicker.select failed with err: ' + JSON.stringify(err));
});
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error('PhotoViewPicker failed with err: ' + JSON.stringify(err));
}
}
async uriGetAssets() {
try {
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(this.context);
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
// 配置查询条件,使用PhotoViewPicker选择图片返回的uri进行查询
predicates.equalTo('uri', this.uris[0]);
let fetchOption: photoAccessHelper.FetchOptions = {
fetchColumns: [photoAccessHelper.PhotoKeys.WIDTH, photoAccessHelper.PhotoKeys.HEIGHT,
photoAccessHelper.PhotoKeys.TITLE, photoAccessHelper.PhotoKeys.SIZE, photoAccessHelper.PhotoKeys.DURATION],
predicates: predicates
};
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> =
await phAccessHelper.getAssets(fetchOption);
// 得到uri对应的PhotoAsset对象,读取文件的部分信息
const asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
console.info('asset displayName: ', asset.displayName);
console.info('asset uri: ', asset.uri);
console.info('asset photoType: ', asset.photoType);
console.info('asset width: ', asset.get(photoAccessHelper.PhotoKeys.WIDTH));
console.info('asset height: ', asset.get(photoAccessHelper.PhotoKeys.HEIGHT));
console.info('asset SIZE: ' + asset.get(photoAccessHelper.PhotoKeys.SIZE));
console.info('asset DURATION: ' + asset.get(photoAccessHelper.PhotoKeys.DURATION));
// 获取缩略图
asset.getThumbnail((err, pixelMap) => {
if (err == undefined) {
console.info('getThumbnail successful ' + JSON.stringify(pixelMap));
} else {
console.error('getThumbnail fail', err);
}
});
} catch (error) {
console.error('uriGetAssets failed with err: ' + JSON.stringify(error));
}
}
build() {
Button('获取文件大小').width(100).height(100)
.onClick(() => {
this.photoPickerGetUri()
})
}
}
在HarmonyOS鸿蒙Next系统中,获取相册图片大小以及视频时长可以通过以下步骤实现:
获取相册图片大小
- 使用
PhotoPicker
选择图片,获取图片的URI。 - 通过
PhotoAccessHelper
获取对应的PhotoAsset
对象。 - 使用
getImageInfo
方法获取图片的宽高信息,从而计算出图片大小(面积)。
获取视频时长
- 使用
PhotoPicker
选择视频,获取视频的URI。 - 通过
avMetadataExtractor.fetchMetadata
方法获取视频的元数据。 - 从元数据中提取视频的时长信息。
请注意,上述操作需要在应用中声明并获取相应的存储访问权限。如果应用未声明权限或用户未授权,则无法访问相册中的媒体文件。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。