相关问题
获取网络图片并保存到相册
360浏览 • 1回复 待解决
如何使用Web组件下载pdf文件并展示给用户
147浏览 • 1回复 待解决
把应用沙箱下的图片保存到图库
357浏览 • 1回复 待解决
如何将像素点保存到图片文件
881浏览 • 1回复 待解决
怎样保持文件并允许用户拷出来?
687浏览 • 1回复 待解决
能否应用内展示应用市场详情页并下载
366浏览 • 1回复 待解决
Hi3861数据保存到flash
7684浏览 • 1回复 已解决
怎么下载网络上PDF保存到本地?
2256浏览 • 1回复 待解决
怎么把视频保存到相册以及主机端?
2511浏览 • 1回复 待解决
tiff数据怎么保存到postgresql数据库里?
2320浏览 • 1回复 待解决
视频流数据编码生成MP4文件保存到沙箱路径
386浏览 • 1回复 待解决
长按活动图片可以支持把图片保存到本地
487浏览 • 1回复 待解决
如何将视频保存到相册以及主机端
4005浏览 • 1回复 待解决
鸿蒙开发HarmonyOS图片该如何保存到数据库
7694浏览 • 2回复 待解决
如何把ImageReceiver收到的视频帧数据保存到本地
152浏览 • 1回复 待解决
有谁知道如何将图片保存到相册
387浏览 • 1回复 待解决
pixelMap 和 imageSource 的数据类型如何保存到相册
503浏览 • 1回复 待解决
怎样让用户选择并加载图片
7343浏览 • 1回复 待解决
如何简便的将data中的total保存到数组里
3171浏览 • 2回复 待解决
图片压缩并保存方法,有人知道吗?
299浏览 • 0回复 待解决
图片保存到相册codelabs示例部分语法不支持高版本
414浏览 • 1回复 待解决
应用开发时如何全局保存变量,在ets文件中使用
841浏览 • 1回复 待解决
在native侧创建file并保存进沙箱路径
478浏览 • 1回复 待解决
如何获取profile内的文件
373浏览 • 1回复 待解决
怎么把base64字符串转成图片保存到本地
984浏览 • 1回复 待解决
在浏览器的工具栏中,截图是常见的功能之一。本文介绍如何使用OH API10新增的componentSnapshot接口实现应用内组件截图,然后将截屏接口输出的图片通过FilePicker保存到系统文管,或者通过photoAccessHelper 保存到系统图库。
效果呈现
运行环境
SDK API 10
实现思路
场景一:截图通过FilePicker保存到系统文管
组件截图使用componentSnapshot接口即可,但是参考文档文件管理-保存用户文件过程中,发现在开发者视角下将图片保存到系统文管存在2个问题:
1. photoViewPicker.save 拉起FilePicker系统文管界面,然后用户选择目标文件夹进行文件保存,保存成功后,返回保存图片文件的uri。如下文档示例:
根据photoViewPicker.save接口规范,返回的uri权限是读写权限,
不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
但是,应用只有一个截屏按钮,在该按钮的onClick回调中需要执行截屏+拉起FilePicker界面选择目标文件夹+读写图片文件操作。
根据
JS的事件循环,如果在picker回调外使用setTimeout延迟执行获取uri后的文件读写操作,开发者无法确定用户在photoViewPicker.save拉起的文件管理器页面停留多长时间,什么时候picker回调执行结束,延迟执行时间未知。如下代码:
如果用户文件管理器页面操作大于setTimeout的1s,即在picker回调返回之前触发了setTimeout内的读写操作,会由于uri为空而导致文件打开(fs.openSync)时出现
js crash错误。
2.文件写操作接口为writeSync(fd: number, buffer: ArrayBuffer | string),截屏接口输出为PixelMap图片对象,开发者的做法可能会根据接口入参的类型,将PixelMap直接转为ArrayBuffer,然后将ArrayBuffer直接进行读写:
但是这种做法虽然可以成功保存图片,但是会导致图片格式错误,需要一个完整的示例去指导用户进行读写图片操作。
针对问题1,使用@Watch监听photoViewPicker.save返回的uri,当uri更新之后再进行图片文件读写操作,这样可以避免uri为空的js crash错误。
针对问题2,需要先将PixelMap图片对象编码成不同格式的存档图片,然后再用于后续处理,如保存、传输等。
场景二:通过photoAccessHelper 保存到系统图库
由于创建相册为system接口,三方应用不可调用,所本场景只使用public接口保存在图库默认的相册里。更多接口介绍可查看相册管理相关文档。
方案介绍
场景一方案
1. componentSnapshot.get("root"),应用内组件截图,输出PixelMap图片对象
2. photoViewPicker.save(photoSaveOptions),拉起FilePicker选择目标文件夹,保存图片文件,输出文件保存的uri
3. @Watch监听photoViewPicker.save返回的uri,当uri更新之后再进行图片文件读写操作
场景二方案
类似于场景一:
1.componentSnapshot.get(“root”),应用内组件截图,输出PixelMap图片对象。
2.phAccessHelper.createAsset,调用createAsset接口创建图片资源,拿到返回的uri。
3。@Watch监听photoViewPicker.save返回的uri,当uri更新之后再进行图片文件读写操作。