HarmonyOS 根据视频路径生成缩略图

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

请参考以下Demo:

import media from '@ohos.multimedia.media';
import image from '@ohos.multimedia.image';
import { BusinessError } from '@ohos.base';
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import photoAccessHelper from '@ohos.file.photoAccessHelper';

@Entry
@Component
struct Index {
  // pixelMap对象声明,用于图片显示
  @State pixelMap: image.PixelMap | string | undefined = undefined;

  build() {
    Column() {
      Button() {
        Text('select').fontSize(20).fontWeight(FontWeight.Bold)
      }.margin({ top: 20 }).width(100).height(40).onClick(() => this.showPicker())

      Image(this.pixelMap).width(300).height(300).margin({ top: 20 })
    }.width('100%').height('100%')
  }

  showPicker() {
    // 创建图库选择器对象实例
    const photoViewPicker = new photoAccessHelper.PhotoViewPicker();
    // 图库选项配置,类型与数量
    let selectOptions = new photoAccessHelper.PhotoSelectOptions();
    selectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.VIDEO_TYPE;
    selectOptions.maxSelectNumber = 1;
    //调用select()接口拉起图库界面进行文件选择,文件选择成功后,返回PhotoSelectResult结果集
    photoViewPicker.select(selectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
      //用一个全局变量存储返回的uri
      if (photoSelectResult.photoUris?.[0]) {
        this.testFetchFrameByTime(photoSelectResult.photoUris[0])
      }
    }).catch((err: BusinessError) => {
      console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
    })
  }

  // 获取缩略图
  async testFetchFrameByTime(filePath: string) {
    // 创建AVImageGenerator对象
    let avImageGenerator: media.AVImageGenerator = await media.createAVImageGenerator()
    let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
    let avFileDescriptor: media.AVFileDescriptor = { fd: file.fd };
    avImageGenerator.fdSrc = avFileDescriptor;
    // 初始化入参
    let timeUs = 0
    let queryOption = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC
    let param: media.PixelMapParams = { width: 300, height: 400, }
    // 获取缩略图(promise模式)
    this.pixelMap = await avImageGenerator.fetchFrameByTime(timeUs, queryOption, param)
    // 释放资源(promise模式)
    avImageGenerator.release()
    console.info(`release success.`)
    fs.closeSync(file);
  }
}
分享
微博
QQ
微信
回复
3天前
相关问题
缩略图,如何获取文件的缩略图
739浏览 • 1回复 待解决
HarmonyOS读取视频缩略图问题求助
630浏览 • 1回复 待解决
鸿蒙能获取图片指定大小的缩略图
9612浏览 • 1回复 待解决
HarmonyOS 应用沙盒路径视频无法播放
64浏览 • 1回复 待解决
Harmony 如何读取本地视频文件路径
14728浏览 • 2回复 待解决