HarmonyOS鸿蒙Next中图片选择API解惑

HarmonyOS鸿蒙Next中图片选择API解惑 选择图片的api:

1、picker.PhotoViewPicker和photoAccessHelper.PhotoViewPicker有什么区别。

2、这两种方式是否都需要申请’ohos.permission.READ_IMAGEVIDEO’权限。

3、文档中提到的临时授权方式具体是什么意思。

3 回复
  1. picker是文件选择器,封装PhotoViewPicker、DocumentViewPicker、AudioViewPicker等API模块具有选择与保存的能力 photoAccessHelper是相册模块,包括创建相册以及访问、修改相册中的媒体数据信息等 在图片相册处理相关的功能建议使用photoAccessHelper相册模块

  2. 在选择图片获取信息方面,两种方式都可以使用临时授权方式,不申请’ohos.permission.READ_IMAGEVIDEO’权限

  3. 临时授权可参考此文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/user-file-uri-intro-V5#媒体文件uri的使用方式 ,如果不想申请权限,必须先通过PhotoViewPicker.select接口得到图片的uri,才可获取部分信息。

Demo:

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

@Entry
@Component
struct Index {
  @State imagePixelMap: image.PixelMap | undefined = undefined
  @State uris: Array<string> = [];

  build() {
    Row() {
      Column() {
        Text('选择图片,获取url信息')
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            let photoSelectOptions = new picker.PhotoSelectOptions();
            photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
            photoSelectOptions.maxSelectNumber = 5;
            let photoPicker = new picker.PhotoViewPicker(getContext(this));
            photoPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
              this.uris = photoSelectResult.photoUris;
              let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
              predicates.equalTo('uri', this.uris[0]);
              let fetchOption: photoAccessHelper.FetchOptions = {
                fetchColumns: [photoAccessHelper.PhotoKeys.WIDTH, photoAccessHelper.PhotoKeys.HEIGHT,
                  photoAccessHelper.PhotoKeys.TITLE],
                predicates: predicates
              };
              photoAccessHelper.getPhotoAccessHelper(getContext(this))
                .getAssets(fetchOption)
                .then((fetchResult) => {
                  fetchResult.getFirstObject().then((asset) => {
                    asset.getThumbnail((err, pixelMap) => {
                      if (err == undefined) {
                        console.info('getThumbnail successful ' + pixelMap);
                        this.imagePixelMap = pixelMap
                      } else {
                        console.error('getThumbnail fail', err);
                      }
                    });
                  })
                })
            }).catch((err: BusinessError) => {
            });
          })
        Image(this.imagePixelMap)
          .width(100)
          .height(100)
          .backgroundColor(Color.Red)
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中图片选择API解惑的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS鸿蒙Next中的图片选择API主要涉及PhotoPicker模块,用于实现图片的选择、预览和获取功能。开发者可以通过PhotoPicker提供的接口,调用系统相册或文件管理器,让用户选择图片。

主要API介绍:

  • PhotoPicker.startPhotoPicker():启动图片选择器,允许用户从相册或文件管理器中选择图片。
  • PhotoPicker.getSelectedPhotos():获取用户选择的图片列表,返回结果为图片的URI或文件路径。
  • PhotoPicker.setMaxSelectCount():设置用户最多可选择的图片数量。
  • PhotoPicker.setFilterType():设置图片过滤器,限制用户只能选择特定类型的图片(如JPEG、PNG等)。

使用场景:

  • 单张图片选择:适用于用户需要上传头像、证件照等场景。
  • 多张图片选择:适用于用户需要批量上传图片的场景,如社交媒体发帖。
  • 图片预览:在选择图片前,允许用户预览图片内容,确保选择的图片符合需求。

注意事项:

  • 调用PhotoPicker时需要申请相应的权限,如读取存储权限。
  • 返回的图片URI或文件路径需要进一步处理,如解码、压缩或上传。
  • PhotoPicker支持跨设备调用,开发者可以指定目标设备,实现跨设备图片选择。

通过PhotoPicker模块,开发者可以快速集成图片选择功能,提升应用的用户体验。

在HarmonyOS鸿蒙Next中,图片选择API主要通过@ohos.file.picker模块实现。开发者可以使用PhotoViewPicker类来选择图片,支持单张或多张图片选择。主要步骤如下:

  1. 创建PhotoViewPicker实例。
  2. 配置选择参数,如选择数量、文件类型等。
  3. 调用select方法,弹出图片选择界面。
  4. 通过Promise或回调获取选择的图片URI。

示例代码:

import picker from '@ohos.file.picker';

let photoPicker = new picker.PhotoViewPicker();
photoPicker.select().then((PhotoSelectResult) => {
    console.info('PhotoSelectResult uri: ' + PhotoSelectResult[0].uri);
}).catch((err) => {
    console.error('PhotoSelectResult err: ' + err);
});

该API简化了图片选择流程,提升了开发效率。

回到顶部