网站建设信 信科网络,湖南3合1网站建设电话,wordpress的书,在线做网站图标【HarmonyOS】PixelMap转化为Uri
问题背景
鸿蒙中的PixelMap类型#xff0c;其实类似于Android和IOS中的bitmap#xff0c;是对图片数据信息进行描述的一种逻辑运算使用的图片类型。
而鸿蒙中的Uri类型#xff0c;本质其实是带file头的文件存储地址#xff0c;是用来指向…【HarmonyOS】PixelMap转化为Uri
问题背景
鸿蒙中的PixelMap类型其实类似于Android和IOS中的bitmap是对图片数据信息进行描述的一种逻辑运算使用的图片类型。
而鸿蒙中的Uri类型本质其实是带file头的文件存储地址是用来指向文件存储路径的一个字符串例如
file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg;去掉file头其实就是path类型了。
现在我们已经搞清楚两个类型都是什么那如何转化呢
解决方案
首先这两种类型是无法直接转化的经过刚才的类型介绍我们知道Uri是文件的存储路径如果已经有存储路径说明进行了file操作。那答案显而易见了我们只需要将PixelMap进行图片存储到沙箱中得到File之后再拿到Uri即可。 /*** PixelMap转为图片Uri* param pixelMap* returns*/public async PixelMapToUri(pixelMap: PixelMap){// 将图片保存到沙箱// 先获取其应用沙箱路径let fileDir getContext().getApplicationContext().filesDir;// 创建图片目录let fileSavePath fileDir image;let res fs.accessSync(fileSavePath);if(res){fs.mkdirSync(fileSavePath, true);}let packer image.createImagePacker();let packOpts: image.PackingOption {// 目标格式。当前只支持image/jpeg、image/webp、image/png和image/heif12不同硬件设备支持情况不同。// 因为jpeg不支持透明通道若使用带透明通道的数据编码jpeg格式透明色将变为黑色。format: image/png,// JPEG编码中设定输出图片质量的参数取值范围为0-100。0质量最低100质量最高质量越高生成图片所占空间越大。quality: 100}// fileSavePath 打开文件的应用沙箱路径或URI使用URI作为入参时仅支持打开文件。//开文件的选项必须指定如下选项中的一个默认以只读方式打开// - OpenMode.READ_ONLY(0o0)只读打开。//// - OpenMode.WRITE_ONLY(0o1)只写打开。//// - OpenMode.READ_WRITE(0o2)读写打开。//// 给定如下功能选项以按位或的方式追加默认不给定任何额外选项//// - OpenMode.CREATE(0o100)若文件不存在则创建文件。(path为URI时不支持创建文件)//// - OpenMode.TRUNC(0o1000)如果文件存在且文件具有写权限则将其长度裁剪为零。//// - OpenMode.APPEND(0o2000)以追加方式打开后续写将追加到文件末尾。//// - OpenMode.NONBLOCK(0o4000)如果path指向FIFO、块特殊文件或字符特殊文件则本次打开及后续 IO 进行非阻塞操作。//// - OpenMode.DIR(0o200000)如果path不指向目录则出错。不允许附加写权限。//// - OpenMode.NOFOLLOW(0o400000)如果path指向符号链接则出错。//// - OpenMode.SYNC(0o4010000)以同步IO的方式打开文件。let targetFile fs.openSync(fileSavePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);let fd targetFile.fd;await packer.packToFile(pixelMap, fd, packOpts);fs.closeSync(fd);let targetUri fileUri.getUriFromPath(targetFile.path);return targetUri;}