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 LazyForEach问题刷新UI问题
1233浏览 • 1回复 待解决
HarmonyOS 焦点问题
839浏览 • 1回复 待解决
HarmonyOS推送问题
830浏览 • 1回复 待解决
HarmonyOS Toggle 问题
770浏览 • 1回复 待解决
HarmonyOS gridcell问题
901浏览 • 1回复 待解决
HarmonyOS soundPool问题
975浏览 • 1回复 待解决
HarmonyOS 语法问题
1172浏览 • 1回复 待解决
HarmonyOS notificationManager问题
1072浏览 • 1回复 待解决
HarmonyOS PixelMap问题
919浏览 • 1回复 待解决
HarmonyOS Uri问题
871浏览 • 1回复 待解决
HarmonyOS 正则问题
642浏览 • 1回复 待解决
HarmonyOS startAbility问题
1220浏览 • 1回复 待解决
HarmonyOS interface 问题
1080浏览 • 1回复 待解决
HarmonyOS CustomDialogController问题
1777浏览 • 1回复 待解决
HarmonyOS RichEditor问题
1057浏览 • 1回复 待解决
HarmonyOS TextPicker问题
667浏览 • 1回复 待解决
HarmonyOS eventHub问题
652浏览 • 1回复 待解决
HarmonyOS NumberFormat问题
619浏览 • 1回复 待解决
HarmonyOS TextInput问题
636浏览 • 1回复 待解决
HarmonyOS setResponseData问题
1098浏览 • 1回复 待解决
HarmonyOS setWindowPrivacyMode问题
658浏览 • 1回复 待解决
HarmonyOS openCustomDialog问题
764浏览 • 1回复 待解决
HarmonyOS subwindow问题
558浏览 • 1回复 待解决