HarmonyOS 使用fs压缩图片后,内存持续增长
//打开相册选择图片完成
let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = 'image/*';
PhotoSelectOptions.maxSelectNumber = 9;
let photoPicker = new photoAccessHelper.PhotoViewPicker();
//打开相册
photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult: photoAccessHelper.PhotoSelectResult) => {
//处理返回结果,获取uri,转换为base64字符串
PhotoSelectResult.photoUris.forEach((uri,index)=>{
this.packageImage(uri,80).then(()=>{})
})
})
//uri:相册图片uri, precent:压缩系数
packageImage(uri: string, precent: number): Promise<BOBSelectImageModel> {
return new Promise<BOBSelectImageModel>((resolve, reject) => {
let selectModel = new BOBSelectImageModel()
const imagePackerApi: image.ImagePacker = image.createImagePacker();
let file = fileIo.openSync(uri, fileIo.OpenMode.READ_ONLY);
const imageSourceApi: image.ImageSource = image.createImageSource(file.fd);
let comNum = Math.trunc(precent)
let packOpts: image.PackingOption = { format: "image/jpeg", quality: comNum }
imagePackerApi.packing(imageSourceApi, packOpts).then((data: ArrayBuffer) => {
if (data.byteLength > 0) {
let base64Str = buffer.from(data).toString('base64')
let resultBase64Str = base64Str ? base64Str : ''
BoBLog.debug('', 'resultBase64Str长度-=======+++====' + resultBase64Str.length);
selectModel.PhotoImg = resultBase64Str
selectModel.precent = 0
fileIo.close(file.fd,(err: BusinessError) => {
if (err) {
console.error("close file failed with error message: " + err.message + ", error code: " + err.code);
} else {
console.info("close file succeed");
}
})
resolve(selectModel)
} else {
// fileIo.closeSync(file.fd);
selectModel.precent = 1
resolve(selectModel)
}
})
})
}
多次调用上述压缩方法packageImage,内存会持续增加,最后导致闪退。fileIo.close关闭打印日志为成功。该方法压缩图片方式是否存在问题。有无解决方法解决方案
该方法可以正常处理压缩图片,建议使用release方法释放当前实例对象。用法参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#release7
如果想进一步提升查找性能,可以使用二分查找最接近指定图片压缩目标大小的图片质量quality来压缩图片,示例参考:
HarmonyOS 文件下载保存到系统文件管理中 <a name="section495973514312"></a>
问题描述
next版本中需求:通过网络请求库进行下载文档文件,将文件下载完成后保存到本地。用户通过打开真机系统文件管理,可以查看到此文件。目前通过context存储到的是沙箱路径,真机通过打开文件管理无法直观查看到此文件?请问如何获取文件真实uri路径,进行直接保存?
打开测试机文件管理,里面只有Download、Documents两个文件夹。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 相册选择后压缩图片大小
28浏览 • 1回复 待解决
HarmonyOS 无损压缩图片jpg发现压缩后的图片比原来大
27浏览 • 1回复 待解决
HarmonyOS 使用imagePackerApi.packToFile压缩图片报错
40浏览 • 1回复 待解决
HarmonyOS 如何压缩图片之后再上传?
65浏览 • 1回复 待解决
API 9 ETS如何进行压缩图片?
397浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中使用packing和scale方法有效压缩图片?
144浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何旋转并压缩图库选择的图片?
137浏览 • 1回复 待解决
图片压缩API的质量参数quality与图片原始大小、压缩后大小的关系
1863浏览 • 1回复 待解决
使用图片压缩API的参数影响
548浏览 • 1回复 待解决
HarmonyOS 图片压缩问题
79浏览 • 1回复 待解决
HarmonyOS 图片压缩失败
21浏览 • 1回复 待解决
图片质量压缩,不改变图片大小,可指定图片压缩参数
493浏览 • 1回复 待解决
HarmonyOS 有没有图片压缩、视屏压缩的能力?
233浏览 • 1回复 待解决
HarmonyOS request下载文件后使用fs.listFileSync无法查找到
31浏览 • 1回复 待解决
HarmonyOS 图片压缩工具
59浏览 • 1回复 待解决
HarmonyOS图片压缩不到指定大小
657浏览 • 1回复 待解决
HarmonyOS 如何压缩本地图片?
17浏览 • 1回复 待解决
HarmonyOS 图片压缩和图片转base64
354浏览 • 1回复 待解决
flutter适配HarmonyOS图片压缩的库
229浏览 • 1回复 待解决
HarmonyOS 图片的加载与压缩服务?
247浏览 • 0回复 待解决
HarmonyOS 图片的加载与压缩服务
204浏览 • 1回复 待解决
HarmonyOS 怎么对图片进行压缩上传
100浏览 • 1回复 待解决
HarmonyOS 使用pako包进行gzip压缩解压缩的时候,解压缩后的数据比原数据少了10个字符 -
61浏览 • 1回复 待解决
HarmonyOS 用picker选择图片后压缩并转成base64字符串
52浏览 • 1回复 待解决
可以使用FilePicker来实现文件保存到本地系统管理,FilePicker对应的官网链接:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/save-user-file-V5
问题处理思路:可以先通过picker获取到要选择或者保存文件的公共路径,然后通过fs.copyFile进行文件复制,核心示例代码如下: