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)}`)
})
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
如何保存一张PNG图片到相册中
2120浏览 • 1回复 待解决
从相册获取一张图片 或者自己拍一张图片 如何获取这张图片的路径 用来识别这个图片模型
1659浏览 • 1回复 待解决
HarmonyOS 从相册选取完图片后获取一张图片uri路径后,如何将uri路径转化成ArrayBuffer类型?
244浏览 • 1回复 待解决
相册选择一张图片后,如何进入系统自带的图片编辑页
600浏览 • 1回复 待解决
解决同界面中一张图片的放大会影响另一张图片位置
907浏览 • 1回复 待解决
HarmonyOS 多张图片拼接为一张
178浏览 • 1回复 待解决
如何吸取一张图片的色值?
553浏览 • 1回复 待解决
HarmonyOS从相册中选取一张图片,如何查看尺寸和大小信息
1236浏览 • 1回复 待解决
HarmonyOS 多张画布横向合成一张图片
131浏览 • 1回复 待解决
HarmonyOS 多张string图片合并成一张
124浏览 • 1回复 待解决
HarmonyOS 获取手机最新的一张图片
155浏览 • 1回复 待解决
需要调起系统相册,选择一张图片,并能获取到选择到的图片,应该如何实现
1916浏览 • 1回复 待解决
如何将一张图片转化为PixelMapElement
10171浏览 • 1回复 待解决
HarmonyOS 如何实现屏幕页面整体生成一张图片
207浏览 • 1回复 待解决
HarmonyOS 如何获取手机上最新的一张图片
28浏览 • 1回复 待解决
HarmonyOS 如何把Webview截图转ArrayBuffer或者pixelMap
36浏览 • 1回复 待解决
HarmonyOS将两张图片合成一张的解决方案
556浏览 • 1回复 待解决
HarmonyOS 如何使一张图片拉伸但不变形
834浏览 • 1回复 待解决
HarmonyOS 一张图片怎么叠加一层颜色渐变效果?
206浏览 • 1回复 待解决
如何展示一张图片沿着一个边在z方向进行旋转?
482浏览 • 1回复 待解决
如何给一张图片加上一个灰色圆形的遮罩?
536浏览 • 1回复 待解决
如何将一张彩色的图片渲染成黑白图片?
458浏览 • 1回复 待解决
一张图片如何压缩长宽和大小到指定值
478浏览 • 1回复 待解决
HarmonyOS 关于将base64字符串转ArrayBuffer或PixelMap的方法
281浏览 • 1回复 待解决
这边提供有批量选择相册图片,并且将图片压缩,转成base64格式的demo:
页面:
util: