一、图像发展大趋势及 HarmonyOS 图像格式支持策略

自数字图像诞生以来,图像格式经历了多轮更新迭代。从早期的BMP、TIFF等无压缩或轻压缩格式,到后来广泛应用的JPEG、PNG、GIF等主流格式,图像编码技术不断演进,其核心目标始终是——在有限的存储空间与带宽条件下,实现更高质量、更高效率的图像呈现。

在 PC 时代,JPEG 和 PNG 分别作为有损压缩与无损压缩的代表,几乎覆盖了绝大多数图像使用场景。但随着数字图像设备的普及和互联网的飞速发展,传统图像格式的局限性日益凸显,催生出新一代图像格式的需求。

现代图像数据呈现出两大显著趋势:

  • 图像质量持续提高

    • 分辨率稳步提升。
    • 色深逐渐增加。
    • 色域持续拓展。
    • 动态范围逐步升级。

  • 图像数量爆炸性增长

    • 社交媒体、即时通讯、在线购物等应用推动个人日均拍摄图像数大幅提升。
    • 图像成为 AI、视觉识别等领域的重要数据源。

在当今时代,人人皆为“影像内容生产者”,海量的照片与视频对图像的存储、传输和展示提出了更高的要求。HarmonyOS从系统层面持续强化图像处理能力,优先支持主流图像格式,并对实际应用中具备显著优势的格式着重进行优化。

目前,HarmonyOS已支持GIF、JPEG、PNG、WebP、HEIF、BMP等主流图像格式的解码与显示,支持将图像编码为JPEG、PNG、HEIF、WebP、GIF等格式。对TIFF格式和RAW格式预览图的解码支持即将上线。更多格式的支持也正在规划推进中。

二、HEIF的优势及 HarmonyOS 对 HEIF 的优化

HEIF(High Efficiency Image File Format)作为新一代高效图像格式,凭借优异的压缩性能和丰富的编码特性,为数字影像带来了全新的体验。此外,自发布以来的近十年实践中,HEIF已充分证明其稳定性与成熟度,逐步取代传统格式成为未来图像技术的重要选择。

HEIF基于HEVC(H.265)视频压缩标准,具备显著的技术优势:

  • 更高压缩效率:在相同画质下,相比于JPEG、WEBP等传统格式,可节省50%以上的存储空间。
  • 支持HDR和高色深:天然支持10bit色深、HDR显示,更适配现代高性能显示设备
  • 可扩展性强:支持存储增益图Gain Map、深度图Depth Map等辅助图像,适用于HDR、景深重建等高级图像处理场景。

自HarmonyOS 5.0起,对HEIF图像的支持已实现全面升级。系统底层架构进行了优化,结合软硬协同的解码方案,大幅提升了解码效率与运行性能。HarmonyOS 5.x相比于HarmonyOS 4.x,HEIF解码性能提升60%以上,为用户带来更快速、更流畅、更高质量的图像体验。同时,系统也支持HEIF硬件编码,能够快速得到HEIF图片。

三、图像处理开发示例

HarmonyOS的Image组件和Image Kit提供了通用的图像处理API,无需针对HEIF作特殊处理,编程方式与使用JPEG、PNG等图源一致。下面针对开发者基于系统能力进行图像处理开发时,可能采取的两种方式进行介绍。

方式1:直接使用ArkUI提供的Image组件进行显示

方式简介:

Image组件提供了通用的图像显示能力,解码、渲染等流程均由系统完成,支持显示BMP、SVG、GIF、PNG、JPEG、HEIF等多种图像格式,开发者只需要将图像资源传递给Image组件即可实现显示效果。

适用场景:

如果开发者仅期望展示图像,不需要额外加工处理,推荐使用这种方式实现。

核心代码:

// 创建Image组件,直接传入图片文件路径,用于显示
build() {
Column() {
Image('images/view.heic');
}
}

方式2:使用Image Kit解码得到图像像素数据,进一步处理后,再使用Image组件渲染显示。

方式简介:

Image Kit提供了高效的图像解码能力,同样支持显示PNG、JPEG、BMP、SVG、GIF、HEIF等多种图像格式,还支持指定图像尺寸、解码区域、动态范围等参数选项,能够满足更多场景下的定制化需求。

适用场景:

如果开发者不希望直接展示原图,而是需要对图像进行一定的后处理,推荐使用这种方式实现。

核心代码:

// 解码得到图像像素数据
imageSource = image.createImageSource('images/view.heic');
let decodingOptions : image.DecodingOptions = {
editable: true,
desiredPixelFormat: image.PixelMapFormat.RGBA_8888,
};
pixelMap = imageSource.createPixelMapSync(decodingOptions);
// 对图像进行后处理:调用PixelMap的方法,或自行实现对图像像素数据的处理
// 这里以将图像顺时针旋转90度为例
pixelMap. rotate(90);
// 创建Image组件,传入处理后的PixelMap,用于显示
build() {
Column() {
Image(pixelMap);
}
}

四、HEIF图像转码方法

考虑到在部分场景下,应用可能仍然希望使用JPEG图像,这里也给出将HEIF图像转码成JPEG图像的方法。

基于HarmonyOS Image Kit的图像解码和图像编码能力,只需几行代码即可将HEIF图像转码成JPEG图像。

核心代码:

// 创建ImageSource
let imageSource = image.createImageSource('images/view.heic');
// 创建ImagePacker
const imagePacker = image.createImagePacker();
// HEIF到JPEG的转码,指定编码选项,将图片编码为JPEG
// quality推荐设置为95,保证较好的图片质量的同时,使编码后的图片文件体积更小
// 如果希望保留图片的EXIF信息,必须将needsPackProperties参数指定为true
let packOptions: image.PackingOption = {
format: “image/jpeg” ,
quality: 95,
needsPackProperties: true,
};
await imagePacker.packToFile(imageSource, file.fd, packOptions);
// 使用完成后,释放编码器和图像源
imagePacker.release();
imageSource.release();

了解更多鸿蒙HEIF图像开发指导,请访问HarmonyOS官网:

  1. 如何处理HEIF图片:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/heif-adapter-faq
  2. Image Kit开发指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/image-kit
  3. Image Kit API参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/image-api

HEIF:更高质量、更小体积,开启 HarmonyOS 图像新体验的更多相关文章

  1. 移动Web—CSS为Retina屏幕替换更高质量的图片

    来源:互联网 作者:佚名 时间:12-24 10:37:45 [大 中 小] 点评:Retian似乎是屏幕显示的一种趋势,这也是Web设计师面对的一个新挑战;移动应用程序的设计师们已经学会了如何为Re ...

  2. AliIAC 智能音频编解码器:在有限带宽条件下带来更高质量的音频通话体验

    随着信息技术的发展,人们对实时通信的需求不断增加,并逐渐成为工作生活中不可或缺的一部分.每年海量的音视频通话分钟数对互联网基础设施提出了巨大的挑战.尽管目前全球的互联网用户绝大多数均处于良好的网络状况 ...

  3. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->WinForm版本新增新的角色授权管理界面效率更高、更规范

    角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...

  4. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本新增新的角色授权管理界面效率更高、更规范

    角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...

  5. 使用firbug调试程序写更高质量的代码设置方法

    在搜狐浏览器内输入about:config 在搜索栏中输入:strict 双击javascript.options.strict,将值变为true

  6. atitit.thumb生成高质量缩略图 php .net c++ java

    atitit.java thumb生成高质量缩略图 php .net c++ 1. 图像缩放(image scaling)---平滑度(smoothness)和清晰度(sharpness) 1 2.  ...

  7. 如何编写高质量的C#代码(一)

    从"整洁代码"谈起 一千个读者,就有一千个哈姆雷特,代码质量也同样如此. 想必每一个对于代码有追求的开发者,对于"高质量"这个词,或多或少都有自己的一丝理解.当 ...

  8. 编写高质量代码改善C#程序的157个建议——建议30:使用LINQ取代集合中的比较器和迭代器

    建议30:使用LINQ取代集合中的比较器和迭代器 LINQ提供了类似于SQL的语法来实现遍历.筛选与投影集合的功能. static void Main(string[] args) { List< ...

  9. MVC 基架不支持 Entity Framework 6 或更高版本 即 NuGet的几个小技巧

    MVC 基架不支持 Entity Framework 6 或更高版本.有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=276833. 原因:mvc版 ...

  10. 编写高质量代码改善C#程序的157个建议——建议56:使用继承ISerializable接口更灵活地控制序列化过程

    建议56:使用继承ISerializable接口更灵活地控制序列化过程 接口ISerializable的意义在于,如果特性Serializable,以及与其像配套的OnDeserializedAttr ...

随机推荐

  1. 通过 AWS CLI 操作 AWS S3

    AWS S3后台提供了上传文件的地方,但是大文件上传比较慢--- 几十kb/s.使用AWS CLI上传文件相对较快 1:安装CLI (这里环境是 Windows) 参考官方文档 :https://do ...

  2. 提前完成今年flag😍

    大半夜的头脑一热就冲上去了,其实很多年前就该这样做的,算是给以前的自己一个答复吧

  3. Xamarin.Android 开启网络请求- 网络权限

    https://blog.csdn.net/xujingcheng123/article/details/115968567 在文件 AndroidManifest.xml 配置    <use ...

  4. Layui 更新Table 表格内容的值

    $.ajax({ //请求方式 type: "POST", //请求地址 url: "/", //数据,json字符串 data: { }, //请求成功 su ...

  5. vscode prettier

    前言 与通过npm安装的prettier关联 vscode 的 prettier 扩展,会优先使用 你项目中明确安装的 prettier(既 npm i prettier --D) 的版本, 如果你没 ...

  6. leetcode 468 验证IP地址

    简介 使用优雅的正则表达式 5种情况 情况: 块只包含一位数字,范围是 0 到 9. 块包含两位数字,第一位的范围是 1 到 9,第二位是 0 到 9. 块包含三位数字,且第一位为 1.第二.三位可以 ...

  7. cursor究竟如何使用?

    cursor使用 一.三大核心AI功能 1.tab键只能小助手 具有强大的代码自动补全,tab接受建议,也可以按esc拒绝建议,部分接受建议需要 ctrl+→ 已有代码片段,按tab进行生成 1.1单 ...

  8. 【Container App】创建Container App后发现Application URL不完整

    问题描述 新创建了一个Container App服务,构建在内部访问的环境中( Container App Environment配置了虚拟网络并设置为内部访问). ##Container Apps ...

  9. ICEE-Datasheet: 找Datasheet 的好去处DigiKey.com,Mouser.com,Arrow.com, AllDatasheet.com加各大原产商官网

    找Datasheet 的好去处: DigiKey,Mouser,Arrow 三家全球最大的电子元器件采购平台,搜索到的元器件页面会有Datasheet可供下载. https://www.digikey ...

  10. mysql中date_format函数格式化日期,如何精确到毫秒?

    直接看官网文档 : https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format ...