HarmonyOS 鸿蒙Next如何获取存入到本地的pixelMap图片的uri
HarmonyOS 鸿蒙Next如何获取存入到本地的pixelMap图片的uri
将稿件生成为指定样式的海报图片,并社会化分享到第三方APP
1. 用组件绘制出海报的样式。
2. 使用componentSnapshot组件截图,生成pixelMap格式图片。
3. 使用SaveButton组件将pixeMap存入到相册。
4. 再使用systemShare将图片分享出去
存在问题:
在步骤3时,用fs.write方法,可将图片存入相册。但是步骤4 systemShare分享该图片,需要获取到该图片
的uri,目前无法获取到刚才存入的图片的uri。
问题就是:如何获取到fs.write写入的图片的uri地址。(不需要用户点击打开相册选择刚存入的图片)
用savebutton保存图片的时候,就可以拿到url。 参考如下方法: //图片转换成字节数组
export async function packingPixelMap2Jpg(pixelMap: PixelMap): Promise<ArrayBuffer> {
// 创建ImagePacker实例
const imagePackerApi = image.createImagePacker();
// 设置打包参数
// format:图片打包格式,只支持 jpg 和 webp
// quality:JPEG 编码输出图片质量
// bufferSize:图片大小,默认 10M
const packOpts: image.PackingOption = { format: "image/jpeg", quality: 100 };
let imageBuffer: ArrayBuffer = new ArrayBuffer(1);
try {
// 图片压缩或重新打包
imageBuffer = await imagePackerApi.packing(pixelMap, packOpts);
} catch (err) {
console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`);
}
return imageBuffer;
}
//通过uri写入数据保存图片,uri就是您需要的
SaveButton().width('40%').backgroundColor("#1A1D25").onClick(async (event:ClickEvent, result:SaveButtonOnClickResult) => {
if (result == SaveButtonOnClickResult.SUCCESS) {
try {
const context = getContext(this);
let helper = photoAccessHelper.getPhotoAccessHelper(context);
// onClick触发后10秒内通过createAsset接口创建图片文件,10秒后createAsset权限收回。
let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png');
// 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
let file = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
const imageBuffer = await packingPixelMap2Jpg(pixelMap as image.PixelMap)
// 写到媒体库文件中
fs.writeSync(file.fd, imageBuffer);
// 关闭文件
fs.closeSync(file.fd);
promptAction.showToast({
message: '已保存至相册',
duration: 2500
});
} catch (error) {
console.error("error is "+ JSON.stringify(error));
}
}
else {
console.error("result error is "+ JSON.stringify(result));
}
})
更多关于HarmonyOS 鸿蒙Next如何获取存入到本地的pixelMap图片的uri的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,获取存入到本地的pixelMap
图片的URI,通常涉及以下几个步骤:
-
保存PixelMap到文件:首先,将
PixelMap
对象保存为本地文件,可以选择常见的图片格式如PNG或JPEG。使用FileSaver
类来实现保存操作,指定保存路径和文件名。 -
获取文件URI:保存成功后,通过文件路径构造URI。HarmonyOS提供了
Uri
类,可以通过Uri.parse("file:///" + 文件绝对路径)
的方式来获取文件的URI。注意,路径需要使用绝对路径,并且根据系统要求,可能需要对路径进行编码处理。 -
访问权限:确保应用有权限访问存储位置。在
config.json
中声明存储权限,并在运行时请求用户授权。 -
URI使用:获取到的URI可以用于图片显示、分享或其他需要URI的场景。
示例代码(简化版,未包含错误处理):
FileSaver fileSaver = new FileSaver();
fileSaver.save(pixelMap, filePath, FileSaver.SaveCallback{
@Override
public void onSuccess(String fileUri) {
Uri uri = Uri.parse("file:///" + filePath);
// 使用uri
}
@Override
public void onFail(int errorCode, String errorMessage) {
// 处理失败
}
});
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html