HarmonyOS ImageData问题

ImageData怎么转成base64,是从canvas得到的ImageData,需求是把canvas绘制的图片转成base64字符串。

HarmonyOS
2024-11-11 09:44:41
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

​canvas通过getPixelMap方法获取PixelMap,然后通过pixelMap转base64字符串。

参考demo:​

import { image } from '@kit.ImageKit' 
import { util } from '@kit.ArkTS' 
@Entry 
@Component 
struct Index { 
  private settings: RenderingContextSettings = new RenderingContextSettings(true) 
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 
  @State picBase64:string = '' 
  async pixelToBase64(data: PixelMap): Promise<string> { 
    const imagePackerApi: image.ImagePacker = image.createImagePacker() 
    let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 30 } 
    try { 
      let readBuffer: ArrayBuffer = await imagePackerApi.packing(data, packOpts) 
      let bufferArr = new Uint8Array(readBuffer) 
      let help = new util.Base64Helper 
      let base = help.encodeToStringSync(bufferArr) 
      return base 
    } catch (err) { 
      return '' 
    } 
  } 
  build() { 
    Scroll(){ 
      Column() { 
        Canvas(this.context) 
          .width(300) 
          .height(300) 
          .backgroundColor('#ffffff') 
          .onReady(() => { 
            let grad = this.context.createConicGradient(0, 50, 80) 
            grad.addColorStop(0.0, '#ff0000') 
            grad.addColorStop(0.5, '#ffffff') 
            grad.addColorStop(1.0, '#00ff00') 
            this.context.fillStyle = grad 
            this.context.fillRect(0, 30, 100, 100) 
          }) 
        Text(this.picBase64) 
        if(this.picBase64 != ''){ 
          Image('data:image/jpeg;base64,'+this.picBase64) 
        } 
        Button('获取图片数据Base64') 
          .onClick(async ()=>{ 
            let width = this.context.width; 
            let height = this.context.height; 
            let pixelmap = this.context.getPixelMap(0,0,width,height) 
            let str = await this.pixelToBase64(pixelmap) 
            this.picBase64 = str 
          }) 
      } 
    } 
    .width('100%') 
    .height('100%') 
  } 
}
分享
微博
QQ
微信
回复
2024-11-11 16:07:17
相关问题
HarmonyOS Toggle问题
511浏览 • 0回复 待解决
HarmonyOS setResponseData问题
395浏览 • 1回复 待解决
HarmonyOS gridcell问题
259浏览 • 1回复 待解决
HarmonyOS interface 问题
310浏览 • 1回复 待解决
HarmonyOS soundPool问题
251浏览 • 1回复 待解决
HarmonyOS CustomDialogController问题
530浏览 • 1回复 待解决
HarmonyOS startAbility问题
371浏览 • 1回复 待解决
HarmonyOS notificationManager问题
0浏览 • 1回复 待解决
HarmonyOS HarmonyOS社区组件问题
314浏览 • 1回复 待解决
HarmonyOS CustomDialogController组件问题
375浏览 • 1回复 待解决
HarmonyOS 权限配置问题
345浏览 • 1回复 待解决
HarmonyOS TextInput焦点问题
404浏览 • 1回复 待解决
HarmonyOS应用签名问题
382浏览 • 1回复 待解决
HarmonyOS 画布问题咨询
232浏览 • 1回复 待解决
HarmonyOS Grid相关问题
381浏览 • 1回复 待解决
HarmonyOS 弹窗异常问题
371浏览 • 1回复 待解决
HarmonyOS 组件复用问题
339浏览 • 1回复 待解决
HarmonyOS 开发@Prop问题
332浏览 • 1回复 待解决
HarmonyOS 事件穿透问题
533浏览 • 1回复 待解决
HarmonyOS IPC/RPC问题
467浏览 • 1回复 待解决
HarmonyOS 全局弹窗问题
406浏览 • 1回复 待解决
HarmonyOS TextInput 组件问题
482浏览 • 1回复 待解决
HarmonyOS 地图呈现问题
397浏览 • 1回复 待解决
HarmonyOS 证书相关问题
378浏览 • 1回复 待解决
HarmonyOS resourceManager使用问题
465浏览 • 1回复 待解决