HarmonyOS 鸿蒙Next 使用PhotoViewPicker只能获取图片的url,没办法获取图片的原始信息吗?

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

HarmonyOS 鸿蒙Next 使用PhotoViewPicker只能获取图片的url,没办法获取图片的原始信息吗? 我是需要将图片上传服务器,编码感觉麻烦,因为拿出来的时候还需要解码
我想拉起相册选择图片,将二进制数据直接给服务器来处理,目前是获取到了这个

photoUris":["datashare:///media/image/41"],"isOriginalPhoto"

用的api9,接下来怎么搞,求助!!

12 回复

拿走用 不谢

import { picker } from '@kit.CoreFileKit'
import fs from '@ohos.file.fs';
import { util } from '@kit.ArkTS';

class PhotoPlugin {
  async pickerPhoto(){
    // 1. 打开相册选择图片
    let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
    PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    PhotoSelectOptions.maxSelectNumber = 1;
    let photoPicker = new photoAccessHelper.PhotoViewPicker();

    const res = await photoPicker.select(PhotoSelectOptions)
    console.log('mk-logger', 'photoPlugin', JSON.stringify(res))

    // 2. 文件操作
    // 2.1 获取照片的uri地址
    const uri = res.photoUris[0]
    // 2.2 根据uri同步打开文件
    const file = fs.openSync(uri)
    // 2.3 同步获取文件的详细信息
    const stat = fs.statSync(file.fd)
    // 2.4 创建缓冲区存储读取的文件流
    const buffer = new ArrayBuffer(stat.size)
    // 2.5 开始同步读取文件流到缓冲区
    fs.readSync(file.fd, buffer)
    // 2.6 关闭文件流
    fs.closeSync(file)

    // 3. 转成base64编码的字符串
    const helper = new util.Base64Helper()
    const str = helper.encodeToStringSync(new Uint8Array(buffer))
    console.log('mk-logger', 'photoPlugin-str', str)

    return str
   }
}

export const photoPlugin = new PhotoPlugin()

建议保存到沙箱再上传 自己找沙箱api导一下再传

更多关于HarmonyOS 鸿蒙Next 使用PhotoViewPicker只能获取图片的url,没办法获取图片的原始信息吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


前辈你好,我想直接上传二进制的图片数据到服务器,不进行base64的编码可以吗

太感谢拉!!!,

完蛋,我使用的是api9,然后学校只让使用api9,emm,

希望HarmonyOS能继续优化系统稳定性,减少崩溃和重启的情况。

图片上传服务器建议还是要编码,数据可能损坏,安全性也无法保证。传输之前最好还要加密。

图片的编解码可以参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/image-encoding-V5

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/image-decoding-V5

用fs打开uri,不就可以拿到二进制了

感谢!感谢!,目前在搞fs的使用,我一点点试,

为什么必须要编码为64,不能使用二进制吗

在HarmonyOS中,使用PhotoViewPicker组件确实只能获取到图片的URL。PhotoViewPicker主要用于从设备相册中选择图片,并返回该图片的URI。通过这个URI,你可以访问图片文件,但它本身并不直接提供图片的原始信息,如EXIF数据、分辨率、拍摄时间等。

要获取图片的原始信息,你需要通过URI读取图片文件,然后使用相应的API解析图片数据。例如,可以使用Image组件或ImageDecoder来读取图片的元数据。这些组件可以帮助你获取图片的详细属性信息。

总结来说,PhotoViewPicker只提供图片的URI,要获取图片的原始信息,需要进一步使用其他API进行解析。

在HarmonyOS鸿蒙Next中,使用PhotoViewPicker确实只能获取图片的URL,无法直接获取图片的原始信息(如EXIF数据、尺寸等)。如果需要获取图片的原始信息,你可以通过URL加载图片后,使用Image相关API解析图片的元数据,或者使用第三方库来提取EXIF信息。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!