HarmonyOS鸿蒙Next中【Flutter】图片保存问题,我们需要的功能是拍完照片加完水印后保存一份到相册中。除了image_gallery_saver插件,有没有更好的解决方法,比如直接将文件源压缩后保存为系统相册图片。

HarmonyOS鸿蒙Next中【Flutter】图片保存问题,我们需要的功能是拍完照片加完水印后保存一份到相册中。除了image_gallery_saver插件,有没有更好的解决方法,比如直接将文件源压缩后保存为系统相册图片。 【问题描述】:使用了image_gallery_saver插件将图片绘制到组件上面,然后将组件截图后保存到相册中。虽然能不用权限保存图片,但是保存后的图片质量很差,原本2m的图片现在只有十几kb。

【问题现象】:我们需要的功能是拍完照片加完水印后保存一份到相册中,现在的流程是拍完图片后加水印,先渲染到页面上,再截取组件信息保存到相册中,操作有点多余和消耗更多,而且每次拍完照片后都需要询问一次用户是否需要保存这张图片。

有没有更好的解决方法,比如直接将文件源压缩后保存为系统相册图片

【版本信息】:   开发工具版本:DEvEco Studio 6.0.1   api语言版本: 21,ArkUI-X 6.0.1.105   手机系统版本: 6.0.0   flutter版本:3.22.1-ohos-1.0.4

【复现代码】:不涉及


更多关于HarmonyOS鸿蒙Next中【Flutter】图片保存问题,我们需要的功能是拍完照片加完水印后保存一份到相册中。除了image_gallery_saver插件,有没有更好的解决方法,比如直接将文件源压缩后保存为系统相册图片。的实战教程也可以访问 https://www.itying.com/category-92-b0.html

5 回复

开发者你好,若是不想使用弹窗授权保存媒体库资源的方式保存图片到相册可以申请受限权限ohos.permission.WRITE_IMAGEVIDEO,自行保存图片。因使用了三方框架,导致无法使用安全控件或授权弹窗保存图片的场景,是可以申请受限权限的,申请时需以此为申请理由。

申请权限后可以通过Flutter MethodChannel实现Flutter和ArkTs侧通信调用相关的功能实现。(链接来自gitCode)

开发者描述的"保存后的图片质量很差,原本2m的图片现在只有十几kb"方便详细描述下或者提供下较完整的demo以便进一步分析吗?

更多关于HarmonyOS鸿蒙Next中【Flutter】图片保存问题,我们需要的功能是拍完照片加完水印后保存一份到相册中。除了image_gallery_saver插件,有没有更好的解决方法,比如直接将文件源压缩后保存为系统相册图片。的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


这是一条评论

Hello

鸿蒙Next中Flutter保存图片到相册,可使用photo_manager插件。该插件支持直接写入文件路径到系统相册,无需依赖image_gallery_saver。具体操作是:处理完图片(加水印、压缩)后,通过photo_managerAssetEntity相关API将图片文件保存至相册。此方法能直接操作文件系统,效率较高。

针对你提到的图片保存质量问题,核心原因在于当前方案将图片渲染到组件再截图,这个过程会丢失原始图像数据。在HarmonyOS Next中,更高效的方式是直接处理图片文件,而非通过UI组件中转。

推荐使用@ohos.multimedia.image@ohos.file.fs系统API直接操作图片数据。具体步骤如下:

  1. 获取原始图片文件:通过相机API拍摄后,你会获得图片的URI或文件路径。

  2. 解码与添加水印:使用image.createImageSource()加载原始图片,通过image.createImagePacker()获取编码器。在添加水印时,直接在图像数据层操作(如使用Canvas绘制水印),避免渲染到UI组件。

  3. 编码保存:将处理后的图像数据通过imagePacker.packing()重新编码为JPEG或PNG格式。你可以通过ImagePackOptions中的quality参数控制压缩质量(例如设置为100以保持高质量)。

  4. 写入相册:使用fs模块将编码后的图片数据写入媒体库目录(例如MediaType.IMAGE对应的目录),系统会自动将其加入相册。

这个方案的优势在于:

  • 保持高质量:直接在图像数据层处理,可控制压缩参数,避免不必要的质量损失。
  • 性能更优:绕过UI渲染和截图步骤,减少内存与计算开销。
  • 流程简化:无需将图片显示到界面,也无需额外询问用户保存(可根据你的业务逻辑决定是否自动保存)。

需要注意的是,如果应用需要直接写入系统相册,可能涉及媒体库权限(例如ohos.permission.WRITE_IMAGEVIDEO),在HarmonyOS Next中需在配置文件中声明并在运行时按需申请。但相比通过插件方案,这种直接调用系统API的方式在性能和集成度上更有优势。

回到顶部