HarmonyOS 相册多选场景pixelMap转ArrayBuffer只有异步方法导致只有一张图片生效
在cordova插件中实现相册多选功能,目前发现图片对应的pixelMap转ArrayBuffer时,如果使用pixelMap.readPixelsToBufferSync()方法,最后生成的base64不对;如果使用imagePackageApi.packing,最后生成的base64是对的,但是这个方法目前只有一个异步方法,我只能在异步回调处理方法中返回结果,导致用户选多张图片的情况下,最终实际只返回了第一张。具体代码如下:
private getPicture(params: object, callbackContext: CallbackContext) {
let imgBase64Arr: string[] = []
const factory: ImageSelectorFactory = new DefaultImageSelectorFactory();
const selector: ImageSelector = factory.create({ maxSelectNumber: params[0] });
selector.openSelectPhoto().then((uris: string[]) => {
//调用成功
forEach(uris, async (item: string, index: number) => {
const file : fileIo.File = fileIo.openSync(item, fileIo.OpenMode.READ_WRITE);
const fd : number = file?.fd;
const ims: image.ImageSource = image.createImageSource(fd);
let pixelMap = ims.createPixelMapSync()
let imgInfo: image.ImageInfo = pixelMap.getImageInfoSync()
let width = imgInfo.size.width
let height = imgInfo.size.height
const imagePackageApi: image.ImagePacker = image.createImagePacker()
let packOpts: image.PackingOption = {
format: 'image/jpeg',
quality: 100,
}
const readBuffer = await imagePackageApi.packing(pixelMap, packOpts)
let base64Helper = new util.Base64Helper()
let uint8Arr = new Uint8Array(readBuffer)
let base64Str = base64Helper.encodeToStringSync(uint8Arr)
//console.info(`base64Str: ${base64Str}}`)
imgBase64Arr.push(base64Str)
//目前测试发现只能在这里返回,但是这里只返回了一张图片的base64
callbackContext.successByJson(imgBase64Arr)
})
//实际相册多选时希望能在这里统一返回所有图片的base64
}).catch((err: BusinessError) => {
//调用失败,拒绝权限信息'Permission denied'
console.error(`调用相册,异常. message is ${JSON.stringify(err)}`)
})
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
HarmonyOS
赞
收藏 0
回答 1
相关问题
如何保存一张PNG图片到相册中
2350浏览 • 1回复 待解决
从相册获取一张图片 或者自己拍一张图片 如何获取这张图片的路径 用来识别这个图片模型
2124浏览 • 1回复 待解决
HarmonyOS 从相册选取完图片后获取一张图片uri路径后,如何将uri路径转化成ArrayBuffer类型?
462浏览 • 1回复 待解决
相册选择一张图片后,如何进入系统自带的图片编辑页
832浏览 • 1回复 待解决
解决同界面中一张图片的放大会影响另一张图片位置
1178浏览 • 1回复 待解决
HarmonyOS 多张图片拼接为一张
844浏览 • 1回复 待解决
如何吸取一张图片的色值?
992浏览 • 1回复 待解决
HarmonyOS从相册中选取一张图片,如何查看尺寸和大小信息
1790浏览 • 1回复 待解决
HarmonyOS 多张string图片合并成一张
539浏览 • 1回复 待解决
HarmonyOS 获取手机最新的一张图片
488浏览 • 1回复 待解决
HarmonyOS 多张画布横向合成一张图片
437浏览 • 1回复 待解决
如何将一张图片转化为PixelMapElement
10678浏览 • 1回复 待解决
需要调起系统相册,选择一张图片,并能获取到选择到的图片,应该如何实现
2046浏览 • 1回复 待解决
HarmonyOS 如何获取手机上最新的一张图片
389浏览 • 1回复 待解决
HarmonyOS 如何实现屏幕页面整体生成一张图片
634浏览 • 1回复 待解决
HarmonyOS将两张图片合成一张的解决方案
707浏览 • 1回复 待解决
HarmonyOS 如何把Webview截图转ArrayBuffer或者pixelMap
310浏览 • 1回复 待解决
HarmonyOS 如何使一张图片拉伸但不变形
1137浏览 • 1回复 待解决
HarmonyOS 一张图片怎么叠加一层颜色渐变效果?
440浏览 • 1回复 待解决
HarmonyOS web组件添加多个bridge object只有最后一个才会生效,期望全部生效。
239浏览 • 1回复 待解决
如何给一张图片加上一个灰色圆形的遮罩?
704浏览 • 1回复 待解决
如何展示一张图片沿着一个边在z方向进行旋转?
670浏览 • 1回复 待解决
如何将一张彩色的图片渲染成黑白图片?
578浏览 • 1回复 待解决
一张图片如何压缩长宽和大小到指定值
699浏览 • 1回复 待解决
这边提供有批量选择相册图片,并且将图片压缩,转成base64格式的demo:
页面:
util: