智能客服
你问我答,随时在线为你解决问题

























从API version 23开始,支持使用ImageSource获取GIF、HEIFS、DNG、WebP、PNG、JFIF、TIFF、AVIS多种图像格式的专有元数据。
| 元数据类别 | MetadataType | 返回字段 | 起始API版本 | 典型信息 |
|---|---|---|---|---|
| GIF | GIF_METADATA | GifMetadata | 26.0.0 | 帧延迟时长、循环次数、画布尺寸等。 |
| HEIFS | HEIFS_METADATA | HeifsMetadata | 23 | 画布高度、画布宽度、未钳制延迟时长等。 |
| DNG | DNG_METADATA | DngMetadata | 24 | DNG版本号、相机型号、CFA参数、黑白电平、色彩校正矩阵等。 |
| WebP | WEBP_METADATA | WebPMetadata | 24 | 画布尺寸、帧延迟时长、循环次数等。 |
| PNG | PNG_METADATA | PngMetadata | 26.0.0 | 像素密度、描述、版权等。 |
| JFIF | JFIF_METADATA | JfifMetadata | 26.0.0 | 像素密度、渐进编码等。 |
| TIFF | TIFF_METADATA | TiffMetadata | 26.0.0 | 分辨率、色度坐标、压缩方式等。 |
| AVIS | AVIS_METADATA | AvisMetadata | 26.0.0 | 帧延迟时长等。 |
HeifsMetadata自API version 23起可用,其中heifsCanvasWidth、heifsCanvasHeight、heifsUnclampedDelayTime三个属性为API版本26.0.0新增。
| 接口 | 说明 |
|---|---|
| readImageMetadata | 读取图像源的元数据,使用propertyKeys指定元数据字段。 从API version 23开始支持。 |
| readImageMetadataByType | 读取图像源的元数据,使用metadataTypes指定元数据类型。 从API version 24开始支持。 |
获取图片专有元数据相关API的详细介绍请参见ImageSource和Metadata。
全局导入Image模块,根据实际需求导入对应的Kit模块。
- // 导入相关模块。
- import { image } from '@kit.ImageKit';
- import { BusinessError } from '@kit.BasicServicesKit';
- import { common } from '@kit.AbilityKit';
- import { fileIo } from '@kit.CoreFileKit';
- import { resourceManager } from '@kit.LocalizationKit';
参考使用ImageSource完成图片解码创建ImageSource实例。
读取专有元数据。
使用readImageMetadata接口,通过指定属性键(propertyKeys)读取对应格式的专有元数据。以读取GIF元数据中的帧延迟时长为例:
- async readImageMetadata(imageSource: image.ImageSource | undefined) : Promise<image.ImageMetadata | undefined> {
- if (imageSource == undefined) {
- console.error('imageSource is undefined.');
- return undefined;
- }
- try {
- let properties: string[] = [image.GifPropertyKey.GIF_DELAY_TIME];
- let index: number = 0;
- let imageMetadata: image.ImageMetadata = await imageSource.readImageMetadata(properties, index);
- if (imageMetadata.gifMetadata != undefined) {
- console.info(`GIF_DELAY_TIME: ${JSON.stringify(imageMetadata.gifMetadata?.delayTime)}`);
- }
- return imageMetadata
- } catch (error) {
- console.error(`ReadImageMetadata failed, error.code: ${error.code},
- error.message: ${error.message}`)
- return undefined;
- }
- }
使用readImageMetadataByType接口,通过指定MetadataType枚举值读取对应格式的专有元数据。以读取GIF元数据为例:
- async readImageMetadataByType(imageSource: image.ImageSource | undefined) : Promise<image.ImageMetadata | undefined> {
- if (imageSource == undefined) {
- console.error('imageSource is undefined.');
- return undefined;
- }
- try {
- let types: image.MetadataType[] = [image.MetadataType.GIF_METADATA];
- let index: number = 0;
- let imageMetadata: image.ImageMetadata = await imageSource.readImageMetadataByType(types, index);
- if (imageMetadata.gifMetadata != undefined) {
- console.info(`GIF_DELAY_TIME: ${JSON.stringify(imageMetadata.gifMetadata?.delayTime)}`);
- }
- return imageMetadata;
- } catch (error) {
- console.error(`ReadImageMetadataByType failed, error.code: ${error.code},
- error.message: ${error.message}`)
- return undefined;
- }
- }
释放imageSource。
确认imageSource的异步方法已经执行完成,不再使用该变量后,可按需手动调用下面方法释放。
- async release() {
- try {
- await this.pixelMap?.release();
- } catch (error) {
- console.error(`Failed to release PixelMap: ${error}.`);
- } finally {
- this.pixelMap = undefined;
- }
-
- try {
- await this.imageSource?.release();
- } catch (error) {
- console.error(`Failed to release ImageSource: ${error}.`);
- } finally {
- this.imageSource = undefined;
- }
- }
智能客服
你问我答,随时在线为你解决问题
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功