Class (HeifsMetadata)
HeifsMetadata implements Metadata
HEIF序列图像元数据类,用于存储图像的元数据。
说明:
本模块首批接口从API version 23开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
导入模块
import { image } from '@kit.ImageKit';
属性
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Multimedia.Image.Core
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| heifsDelayTime | number | 是 | 是 | HEIF序列图片的每帧播放时长。单位为毫秒(ms)。 |
| heifsCanvasHeight | number | 是 | 是 | HEIF序列图片的画布高度。 单位为像素(px)。 该值为正整数。 起始版本: 26.0.0 |
| heifsCanvasWidth | number | 是 | 是 | HEIF序列图片的画布宽度。 单位为像素(px)。 该值为正整数。 起始版本: 26.0.0 |
| heifsUnclampedDelayTime | number | 是 | 是 | HEIF序列图片每帧未钳制的延迟时长。 单位为毫秒(ms)。 该值为正整数。 起始版本: 26.0.0 |
createInstance
static createInstance(): HeifsMetadata
创建一个空的HeifsMetadata实例。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Multimedia.Image.Core
返回值:
| 类型 | 说明 |
|---|---|
| HeifsMetadata | 返回HeifsMetadata的空实例。 |
示例:
async function heifsMetadataCreateInstance(context: Context) {
let heifsMetadata = image.HeifsMetadata.createInstance();
if (heifsMetadata != undefined) {
console.info("createInstance successfully.");
}
}
getProperties
getProperties(key: Array<string>): Promise<Record<string, string | null>>
获取图像元数据的属性值。使用Promise异步回调。
要查询的属性的具体信息请参考HeifsPropertyKey。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Multimedia.Image.Core
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | Array<string> | 是 | 要获取的值的属性名称。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<Record<string, string | null>> | Promise对象,返回元数据要获取的属性的值,如果获取失败则返回错误码。 |
错误码:
以下错误码的详细介绍请参见Image错误码。
| 错误码ID | 错误信息 |
|---|---|
| 7600202 | Unsupported metadata. Possible causes: unsupported metadata type. |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';
function getFileFd(context: Context): number | undefined {
const filePath: string = context.cacheDir + '/heifs.heic'; // 图片包含HeifsMetadata。
const file: fileIo.File = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE);
const fd: number = file?.fd;
return fd;
}
async function heifsMetadataGetProperties(context: Context) {
let fd = getFileFd(context);
let imageSource = image.createImageSource(fd);
let metaData = await imageSource.readImageMetadata(["HeifsDelayTime"]);
if (metaData != undefined && metaData.heifsMetadata != undefined) {
await metaData.heifsMetadata.getProperties(["HeifsDelayTime"]).then((data) => {
console.info('Succeeded in getting properties. ',JSON.stringify(data));
}).catch((error: BusinessError) => {
console.error(`Failed to get properties. error.code is ${error.code}, error.message is ${error.message}`);
});
} else {
console.error('Metadata is null.');
}
}
setProperties
setProperties(records: Record<string, string | null>): Promise<void>
批量设置图片元数据中的指定属性的值。使用Promise异步回调。
要查询的属性的具体信息请参考HeifsPropertyKey。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Multimedia.Image.Core
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| records | Record<string, string | null> | 是 | 用户要修改HeifsMetadata对象的属性和值的键值对集合。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<void> | Promise对象,无返回结果。 |
错误码:
以下错误码的详细介绍请参见Image错误码。
| 错误码ID | 错误信息 |
|---|---|
| 7600202 | Unsupported metadata. Possible causes: unsupported metadata type. |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';
function getFileFd(context: Context): number | undefined {
const filePath: string = context.cacheDir + '/heifs.heic'; // 图片包含HeifsMetadata。
const file: fileIo.File = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE);
const fd: number = file?.fd;
return fd;
}
async function heifsMetadataSetProperties(context: Context) {
let fd = getFileFd(context);
let imageSource = image.createImageSource(fd);
let metaData = await imageSource.readImageMetadata(["HeifsDelayTime"]);
if (metaData != undefined && metaData.heifsMetadata != undefined) {
let setkey: Record<string, string | null> = {
"HeifsDelayTime": "200",
};
await metaData.heifsMetadata.setProperties(setkey).then(async () => {
console.info('Succeeded in setting properties.');
}).catch((error: BusinessError) => {
console.error(`Failed to set metadata Properties. code is ${error.code}, message is ${error.message}`);
})
} else {
console.error('metadata is null. ');
}
}
getAllProperties
getAllProperties(): Promise<Record<string, string | null>>
获取图片中所有元数据的属性的值。使用Promise异步回调。
要查询的属性的具体信息请参考HeifsPropertyKey。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Multimedia.Image.Core
返回值:
| 类型 | 说明 |
|---|---|
| Promise<Record<string, string | null>> | Promise对象,返回元数据拥有的所有属性的值。 |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';
function getFileFd(context: Context): number | undefined {
const filePath: string = context.cacheDir + '/heifs.heic'; // 图片包含HeifsMetadata。
const file: fileIo.File = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE);
const fd: number = file?.fd;
return fd;
}
async function heifsMetadataGetAllProperties(context: Context) {
let fd = getFileFd(context);
let imageSource = image.createImageSource(fd);
let metaData = await imageSource.readImageMetadata(["HeifsDelayTime"]);
if (metaData != undefined && metaData.heifsMetadata != undefined) {
await metaData.heifsMetadata.getAllProperties().then((data) => {
const count = Object.keys(data).length;
console.info('Metadata have ', count, ' properties');
console.info(`Get metadata all properties: ${data}`);
}).catch((error: BusinessError) => {
console.error(`Failed to get metadata all properties. error.code is ${error.code}, error.message is ${error.message}`);
});
} else {
console.error('Metadata is null.');
}
}
clone
clone(): Promise<HeifsMetadata>
对Heifs元数据进行克隆。使用Promise异步回调。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Multimedia.Image.Core
返回值:
| 类型 | 说明 |
|---|---|
| Promise<HeifsMetadata> | Promise对象,成功返回Heifs元数据实例。 |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';
function getFileFd(context: Context): number | undefined {
const filePath: string = context.cacheDir + '/heifs.heic'; // 图片包含HeifsMetadata。
const file: fileIo.File = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE);
const fd: number = file?.fd;
return fd;
}
async function heifsMetadataClone(context: Context) {
let fd = getFileFd(context);
let imageSource = image.createImageSource(fd);
let metaData = await imageSource.readImageMetadata(["HeifsDelayTime"]);
if (metaData != undefined && metaData.heifsMetadata != undefined) {
let new_metadata = await metaData.heifsMetadata.clone();
new_metadata.getProperties(["HeifsDelayTime"]).then((data1) => {
console.info(`Clone new_metadata and get Properties: ${data1}`);
}).catch((err: BusinessError) => {
console.error(`Failed to clone new_metadata. error.code: ${err.code}, error.message: ${err.message}`);
});
} else {
console.error('Metadata is null.');
}
}
getBlob
getBlob(): Promise<ArrayBuffer>
以二进制数据的形式获取元数据。使用Promise异步回调。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Multimedia.Image.Core
返回值:
| 类型 | 说明 |
|---|---|
| Promise<ArrayBuffer> | Promise对象,返回元数据的二进制数据。 |
示例:
import { fileIo } from '@kit.CoreFileKit';
function getFileFd(context: Context): number | undefined {
const filePath: string = context.cacheDir + '/heifs.heic'; // 图片包含HeifsMetadata。
const file: fileIo.File = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE);
const fd: number = file?.fd;
return fd;
}
async function heifsMetadataGetBlob(context: Context) {
let fd = getFileFd(context);
let imageSource = image.createImageSource(fd);
let metaData = await imageSource.readImageMetadata(["HeifsDelayTime"]);
if (metaData != undefined && metaData.heifsMetadata != undefined) {
let blob = await metaData.heifsMetadata.getBlob();
if (blob != undefined) {
console.info("Succeeded in getting blob.");
}
}
}
setBlob
setBlob(blob: ArrayBuffer): Promise<void>
使用二进制数据替换当前元数据。使用Promise异步回调。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Multimedia.Image.Core
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| blob | ArrayBuffer | 是 | 要替换的二进制数据。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<void> | Promise对象,无返回结果。 |
错误码:
以下错误码的详细介绍请参见Image错误码。
| 错误码ID | 错误信息 |
|---|---|
| 7600206 | Invalid parameter. Possible causes: The blob is empty or has a length of 0. |
示例:
import { fileIo } from '@kit.CoreFileKit';
function getFileFd(context: Context): number | undefined {
const filePath: string = context.cacheDir + '/heifs.heic'; // 图片包含HeifsMetadata。
const file: fileIo.File = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE);
const fd: number = file?.fd;
return fd;
}
async function heifsMetadataSetBlob(context: Context) {
let fd = getFileFd(context);
let imageSource = image.createImageSource(fd);
let metaData = await imageSource.readImageMetadata(["HeifsDelayTime"]);
if (metaData != undefined && metaData.heifsMetadata != undefined) {
let blob = await metaData.heifsMetadata.getBlob();
if (blob != undefined) {
console.info("Succeeded in getting blob.");
metaData.heifsMetadata.setBlob(blob);
}
let new_blob = metaData.heifsMetadata.getBlob();
if (new_blob != undefined) {
console.info("new_blob is not undefined");
}
}
}