HarmonyOS如何将图片转Base64

通过photoPicker选择图片获取相册图片路径后,如何将图片转为base64和二进制流?

HarmonyOS
2024-08-13 16:07:19
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

可以参考如下demo:

import fs from '@ohos.file.fs'; 
import buffer from '@ohos.buffer'; 
export function imageToBase64(filePath: string, bufferLen = 409600) { 
  try { 
    const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE); 
    const arrayBuffer = new ArrayBuffer(bufferLen); 
    const readLen = fs.readSync(file.fd, arrayBuffer); 
    const buf = buffer.from(arrayBuffer, 0, readLen); 
    const base64 = buf.toString('base64'); 
    fs.closeSync(file); 
    return base64; 
  } catch (e) { 
    console.error('file err:', JSON.stringify(e)); 
    return '' 
  } 
} 
export function base64ToImage(base64: string, filePath: string) { 
  try { 
    const reg = new RegExp(); 
    const str = base64.replace(reg, ""); 
    const dataBuffer = buffer.from(str, 'base64'); 
    const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
    fs.writeSync(file.fd, dataBuffer.buffer); 
    fs.closeSync(file); 
  } catch (e) { 
    console.error('file err:', JSON.stringify(e)); 
  } 
}

根据picker返回uri创建imagesource:

Image(this.pixelMap).width(200).height(200) 
Button('打开相册') 
  .onClick(() => { 
    //创建图库选择器对象实例 
    const photoViewPicker =new photoAccessHelper.PhotoViewPicker(); 
    //调用select()接口拉起图库界面进行文件选择,文件选择成功后,返回PhotoSelectResult结果集 
    photoViewPicker.select().then(async (photoSelectResult: picker.PhotoSelectResult) => { 
      //用一个全局变量存储返回的uri 
      selectUris = photoSelectResult.photoUris; 
      console.info('photoViewPicker.select to file succeed and uris are:' + selectUris); 
    }).catch((err: BusinessError) => { 
      console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`); 
    }) 
  }) 
Button('creatPixelMap') 
  .margin({ top: 5 }) 
  .onClick((event: ClickEvent) => { 
    //使用fs.openSync接口,通过uri打开这个文件得到fd 
    let file = fs.openSync(selectUris[0], fs.OpenMode.READ_ONLY); 
    console.info('file fd: ' + file.fd); 
    //根据文件fd创建imagSource 
    const imageSource: image.ImageSource = image.createImageSource(file.fd); 
    //完成后关闭fd 
    fs.closeSync(file); 
  }); 
})
imasource编码,再转base64:
imagePackerApi.packing(this.imagesource, packOpts).then(async (data: ArrayBuffer) => { 
  // data 为打包获取到的文件流,写入文件保存即可得到一张图片 
  if (data) { 
 
    let buf: buffer.Buffer = buffer.from(data); 
    let baseStr: string = buf.toString('base64', 0, buf.length); 
    console.log('66666' + JSON.stringify(baseStr)) 
    //送显 
    this.imgStr = "data:image/jpeg;base64," + baseStr; 
  } 
}).catch((error: BusinessError) => { 
  console.error('Failed to pack the image. And the error is: ' + error); 
})
分享
微博
QQ
微信
回复
2024-08-13 21:17:49
相关问题
如何将图片base64字符串PixelMap?
218浏览 • 1回复 待解决
如何将PixelMap图片base64字符串?
162浏览 • 1回复 待解决
HarmonyOS 如何将base64数据转换为图片
218浏览 • 1回复 待解决
如何base64换成图片
9773浏览 • 2回复 待解决
怎么把PixelMap图片BASE64
8997浏览 • 1回复 待解决
js canvasbase64编码图片不全
10296浏览 • 1回复 待解决
PixelMap怎么Base64?(非Java)
2619浏览 • 2回复 待解决
HarmonyOS 图片进行base64编码报错
188浏览 • 1回复 待解决
验证pixelmap数据bufferbase64是否正常
1531浏览 • 1回复 待解决
有没有base64化的相关代码?
496浏览 • 0回复 待解决
HarmonyOS base64解码报错
267浏览 • 1回复 待解决
base64字符串保存为图片的方法
225浏览 • 1回复 待解决
HarmonyOS 中文base64加密解密乱码
161浏览 • 1回复 待解决
base64字符串如何转为图片并保存
2162浏览 • 1回复 待解决
arkts中怎么实现base64编码?
323浏览 • 1回复 待解决