通过photoPicker.select打开图库选择某个视频后,如何获取对应的缩略图?
通过photoPicker.select打开图库选择某个视频后,如何获取对应的缩略图?
通过photoPicker.select打开图库选择某个视频后,如何获取对应的缩略图?请提供一个getThumbnail的demo
2 回复
帮你写了一个demo如下,包含了播放功能
import { common } from '@kit.AbilityKit';
import { fileUri, picker } from '@kit.CoreFileKit';
import fs from '@ohos.file.fs';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { dataSharePredicates } from '@kit.ArkData';
import { image } from '@kit.ImageKit';
let uri: string = '';
@Entry
@Component
struct PhotoPage {
@State imagePath: string = '';
@State pixelMap: image.PixelMap | undefined = undefined;
private controller: VideoController | undefined;
private context = getContext(this) as common.UIAbilityContext;
build() {
Row() {
Column() {
// 显示视频
Video({
src: this.imagePath,
controller: this.controller
})
.height(300)
.width('100%')
.margin({ bottom: 20 });
// 选择视频按钮
Button("选择视频")
.onClick(() => {
this.selectPhoto();
});
// 显示图片
Image(this.pixelMap)
.width(300)
.height(400);
}
.width('100%');
}
.height('100%');
}
// 选择照片
selectPhoto() {
const photoSelectOptions = new picker.PhotoSelectOptions();
const photoViewPicker = new picker.PhotoViewPicker();
// 选择视频文件
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.VIDEO_TYPE;
photoSelectOptions.maxSelectNumber = 1;
// 使用picker选择文件
photoViewPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
const fileUri = photoSelectResult.photoUris[0];
uri = fileUri;
this.getFileInfo(fileUri);
this.uriGetAssets();
});
}
// 获取文件信息
async getFileInfo(filePathString: string) {
let resFile = fs.openSync(filePathString, fs.OpenMode.READ_ONLY);
const dateStr = (new Date().getTime()).toString();
// 临时文件目录
let newPath = this.context.filesDir + `/${dateStr + resFile.name}`;
// 转换路径
fs.copyFileSync(resFile.fd, newPath);
// 新的路径
let realUri = 'file://' + newPath;
this.imagePath = realUri;
console.log(this.imagePath);
}
// 获取文件资产信息
async uriGetAssets() {
try {
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(this.context);
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
// 配置查询条件,使用PhotoViewPicker选择图片返回的uri进行查询
predicates.equalTo('uri', uri);
let fetchOption: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: predicates
};
// 获取PhotoAsset对象
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption);
// 获取第一个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 title: ' + asset.get(photoAccessHelper.PhotoKeys.TITLE));
// 获取缩略图
asset.getThumbnail((err, pixelMap) => {
if (err == undefined) {
this.pixelMap = pixelMap;
console.info('getThumbnail successful ' + JSON.stringify(pixelMap));
} else {
console.error('getThumbnail fail', err);
}
});
} catch (error) {
console.error('uriGetAssets failed with err: ' + JSON.stringify(error));
}
}
}
在HarmonyOS(鸿蒙)中,通过photoPicker.select
打开图库选择视频后,要获取对应视频的缩略图,可以通过以下步骤实现:
首先,使用PhotoViewPicker
组件选择视频文件,并获取所选视频的URI。接着,利用photoAccessHelper
模块的getAssets
方法,根据视频URI查询视频的PhotoAsset
对象。虽然HarmonyOS没有直接提供类似安卓MediaStore.Video.Thumbnails.getThumbnail()
的方法,但可以通过PhotoAsset
对象的getThumbnail
方法获取视频的缩略图。该方法会返回一个PixelMap
对象,即视频的缩略图。
示例代码可能涉及创建选择器、配置选择选项、处理选择结果、查询PhotoAsset
对象以及获取缩略图等步骤。如果在实际操作中遇到问题,建议查阅HarmonyOS官方文档或开发者社区获取更多帮助。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。