HarmonyOS 鸿蒙Next 获取相册图片大小以及视频时长

发布于 1周前 作者 sinazl 来自 鸿蒙OS

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系统中,获取相册图片大小以及视频时长可以通过以下步骤实现:

获取相册图片大小

  1. 使用PhotoPicker选择图片,获取图片的URI。
  2. 通过PhotoAccessHelper获取对应的PhotoAsset对象。
  3. 使用getImageInfo方法获取图片的宽高信息,从而计算出图片大小(面积)。

获取视频时长

  1. 使用PhotoPicker选择视频,获取视频的URI。
  2. 通过avMetadataExtractor.fetchMetadata方法获取视频的元数据。
  3. 从元数据中提取视频的时长信息。

请注意,上述操作需要在应用中声明并获取相应的存储访问权限。如果应用未声明权限或用户未授权,则无法访问相册中的媒体文件。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部