通过photoPicker.select打开图库选择某个视频后,如何获取对应的缩略图?

发布于 1周前 作者 gougou168 最后一次编辑是 5天前 来自 鸿蒙OS

通过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

回到顶部