HarmonyOS 鸿蒙Next如何取出图库视频封面的缩略图
HarmonyOS 鸿蒙Next如何取出图库视频封面的缩略图
2 回复
参考demo:
import { common } from '@kit.AbilityKit';
import { 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 context = getContext(this) as common.UIAbilityContext;
build() {
Row() {
Column() {
Text('11')
Button('选择视频')
.onClick(() => {
this.selectPhoto()
})
Image(this.pixelMap).width(100).height(100)
}.width('100%')
}.height('100%')
}
selectPhoto() {
const photoSelectOptions = new picker.PhotoSelectOptions();
const photoViewPicker = new picker.PhotoViewPicker();
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.VIDEO_TYPE; // 过滤选择媒体文件类型为VIDEO
photoSelectOptions.maxSelectNumber = 1; // 选择媒体文件的最大数目
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() {
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(this.context);
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
// 配置查询条件,使用PhotoViewPicker选择图片返回的uri进行查询
predicates.equalTo('uri', uri);
let fetchOption: photoAccessHelper.FetchOptions = {
// fetchColumns: [],
fetchColumns: [],
predicates: predicates
};
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption);
// 得到uri对应的PhotoAsset对象,读取文件的部分信息
const asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
console.info('getAssets photoAsset.displayName : ' + asset.displayName);
console.info('asset displayName: ', asset.displayName);
asset.getThumbnail((err, pixelMap) => {
if (err == undefined) {
console.info('getThumbnail successful');
this.pixelMap=pixelMap
} else {
console.error('getThumbnail fail', err);
}
})
}
}
更多关于HarmonyOS 鸿蒙Next如何取出图库视频封面的缩略图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,取出图库视频封面的缩略图通常涉及访问媒体存储并提取视频的预览帧。以下是一个简要的步骤说明,不涉及Java或C语言:
HarmonyOS提供了丰富的多媒体API,你可以使用这些API来访问图库并获取视频帧。具体来说,你可以:
- 查询媒体库:使用MediaStore或相应的鸿蒙API查询视频文件。
- 获取视频文件:根据查询结果获取视频文件的URI或路径。
- 提取封面缩略图:利用鸿蒙系统的视频处理API或第三方库(如FFmpeg的鸿蒙封装)来读取视频并提取某一帧作为封面缩略图。这通常涉及解码视频到某一时间点并捕获该帧。
- 显示或保存缩略图:将提取的封面缩略图显示在UI上或保存到存储中。
需要注意的是,实际操作中可能涉及权限管理(如读写存储权限、访问媒体库权限)和异步处理(因为视频处理可能比较耗时)。
如果上述步骤在你的具体开发环境中遇到实现难题,可能是因为API的使用方式或版本差异。此时,建议查阅最新的HarmonyOS开发文档或示例代码,以确保正确理解和使用相关API。
如果问题依旧没法解决请联系官网客服,官网地址是: https://www.itying.com/category-93-b0.html