HarmonyOS 鸿蒙Next使用picker拍照后的图片无法处理

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next使用picker拍照后的图片无法处理

我这边有一个需求是拍照并添加水印,上传服务器 我使用的picker直接拍照,并能拿到图片的uri,格式如:

'file:///media/Photo/32/IMG_1719220431_029/IMG_20240624_171211.jpg' 
let pickerProfile: picker.PickerProfile = { cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK }; 
let pickerResult: picker.PickerResult = await picker.pick(mContext, [picker.PickerMediaType.PHOTO], pickerProfile); this.imgUrl = pickerResult.resultUri

该Uri能正常添加添加到视图上并展示。但是我这边碰到了其他的问题。

  1. 拍照无法设置宽高比,如果能设置成全屏宽高比的那种更好。
  2. 该格式的uri,我这边好像无法进行file操作,比如转成array上传服务器,当调用file读取状态时会报文件不存在,是读取权限的问题吗?

// 读取代码

let file2 = fs.openSync(this.imgPath, fs.OpenMode.READ_ONLY); let stat = fs.lstatSync(this.imgPath); 
let buf2 = new ArrayBuffer(stat.size); 
fs.readSync(file2.fd, buf2);

// 以同步方法从流文件读取数据。

fs.fsyncSync(file2.fd); fs.closeSync(file2.fd);

我的理解是不是因为picker调用的拍照,是在系统级的相册中,无法在应用沙盒层面进行读写操作? 如果我要实现,全屏拍照并添加水印上传,可以给我一个更合理的api建议吗?


更多关于HarmonyOS 鸿蒙Next使用picker拍照后的图片无法处理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

有个帖子是基于CameraKit对相机进行操作,可以参考一下:https://developer.huawei.com/consumer/cn/forum/topic/0202153756649680562?fid=0109140870620153026

拿到返回的picker.PickerResult.resultUri后使用fs.openSync读出图片文件转化为pixelMap,使用image组件渲染在页面上,在保存图片的时候通过drawing.TextBlob.makeFromString方法绘制水印后保存。

注:返回的picker.PickerResult.resultUri是无法做fs.lstatSync操作的,需要copy到cache目录下再去做file操作

更多关于HarmonyOS 鸿蒙Next使用picker拍照后的图片无法处理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


调用fs.openSync 报无权限 13900001 release版本 虚拟机

需要复制到要打开的文件到应用沙箱下,然后打开文件是不需要权限的: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/access-token-overview-V5

第2个问题解决了吗?我也遇到这个问题。

针对HarmonyOS 鸿蒙Next系统中使用picker拍照后图片无法处理的问题,可能的原因及解决方案如下:

首先,确认图片是否已成功保存到指定位置。在鸿蒙系统中,拍照功能通常会将图片保存至应用的私有存储区域或通过回调返回图片数据。检查picker组件的回调逻辑,确保图片路径或数据被正确接收。

其次,检查图片处理逻辑是否存在错误。如果图片数据被正确获取,但处理时出现问题,可能是图片格式不支持、文件损坏或处理逻辑有误。验证图片格式是否为系统支持的类型,并检查处理代码是否有逻辑错误。

此外,还需考虑权限问题。鸿蒙系统对应用访问存储有严格的权限控制。确保应用已申请并获得了访问存储的权限,否则将无法读取或写入图片文件。

最后,若上述步骤均无法解决问题,可能是系统bug或特定环境下的兼容性问题。此时,建议尝试更新鸿蒙系统至最新版本,或检查是否有其他开发者遇到类似问题并分享了解决方案。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部