diff --git a/zh-cn/application-dev/media/image/Readme-CN.md b/zh-cn/application-dev/media/image/Readme-CN.md index e539913f38ed3f9c4ecf2cd870ee7b2078ecf206..abefda93fed6be57a7e08e1dbb40a8636f383a08 100644 --- a/zh-cn/application-dev/media/image/Readme-CN.md +++ b/zh-cn/application-dev/media/image/Readme-CN.md @@ -30,6 +30,8 @@ - 图片接收 - [使用Image_NativeModule完成图片接收](image-receiver-c.md) - [使用Image_NativeModule处理图像信息](image-info-c.md) +- Image Kit常见问题 + - [如何处理HEIF图片](image-faqs/heif-adapter-faq) - 不再推荐使用 - 图片开发指导(依赖JS对象)(C/C++) - [图片解码](image-decoding-native.md) diff --git a/zh-cn/application-dev/media/image/image-faqs/heif-adapter-faq b/zh-cn/application-dev/media/image/image-faqs/heif-adapter-faq new file mode 100644 index 0000000000000000000000000000000000000000..30fadb72725e7badcbf4edd25952f14342ee44df --- /dev/null +++ b/zh-cn/application-dev/media/image/image-faqs/heif-adapter-faq @@ -0,0 +1,42 @@ +# 如何处理HEIF图片? + +什么是HEIF图片? + +高效率图像文件格式(英语:High Efficiency Image File Format, HEIF,也称高效图像文件格式),是一个用于单张图像或图像序列的文件格式。它由动态影像专家小组(MPEG)开发,并在MPEG-H Part 12(ISO/IEC 23008-12)中定义。 + +系统支持HEIF图片的编解码与显示,如果应用基于系统Image Kit、ArkUI Image组件、ArkWeb等模块实现图片处理功能。 + +部分应用对后缀名为.heic、.heif、.HEIC、.HEIF的图片文件做了过滤限制,只需要解除限制,即可正常上传、显示HEIF图片。 + +如果应用期望将图片转为PNG或JPEG格式,可借助Image Kit提供的图片编码能力,将HEIF图片转码成期望格式。 + +将HEIF图片转码成JPEG图片的示例代码如下: +```ts +import { common } from '@kit.AbilityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { fileIo as fs } from '@kit.CoreFileKit'; +import { image } from '@kit.ImageKit'; + + +let context = this.getUIContext().getHostContext() as common.UIAbilityContext; +// 首先获取图片文件的fd,创建ImageSource。 +let fd = 0; +const imageSource : image.ImageSource = image.createImageSource(fd); +// 创建ImagePacker,以便调用图片编码接口。 +const imagePackerApi = image.createImagePacker(); +// 配置图片编码选项: +// format应使用标准的mimetype格式,如:"image/jpeg"、"image/png"、"image/heic"; +// quality推荐设置为80,在保证较好的图片质量的同时,可以使编码后的图片文件体积更小; +// needsPackProperties参数设为true,编码时保存图片属性信息,如包含图片旋转方向的EXIF信息。 +let packOpts : image.PackingOption = { format:"image/jpeg", quality:80, needsPackProperties:true }; +// 指定图片编码文件的存放路径。 +const filePath : string = context.cacheDir + "/result.jpg"; +let file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE); +imagePackerApi.packToFile(imageSource, file.fd, packOpts).then(() => { + console.info('Succeed to pack the image.); +}).catch((error : BusinessError) => { + console.error('Failed to pack the image. And the error is: ' + error); +}).finally(()=>{ + fs.closeSync(file.fd); +}) +``` \ No newline at end of file diff --git a/zh-cn/application-dev/website.md b/zh-cn/application-dev/website.md index 1851bedb48ed25ede77f93ec3bed4d9fb6c69562..5db2ea5c7db0ce0d00c89932b203865f68eafdc0 100644 --- a/zh-cn/application-dev/website.md +++ b/zh-cn/application-dev/website.md @@ -1564,6 +1564,8 @@ - 图片接收 - [使用Image_NativeModule完成图片接收](media/image/image-receiver-c.md) - [使用Image_NativeModule处理图像信息](media/image/image-info-c.md) + - Image Kit常见问题 + - [如何处理HEIF图片](media/image/image-faqs/heif-adapter-faq) - 不再推荐使用 - 图片开发指导(依赖JS对象)(C/C++) - [图片解码](media/image/image-decoding-native.md)