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问题
321浏览 • 1回复 待解决
HarmonyOS subwindow问题
108浏览 • 1回复 待解决
HarmonyOS setWindowPrivacyMode问题
42浏览 • 1回复 待解决
HarmonyOS eventHub问题
155浏览 • 1回复 待解决
HarmonyOS 布局问题
273浏览 • 1回复 待解决
HarmonyOS ImageBitmap问题
117浏览 • 1回复 待解决
HarmonyOS SideBarContaine问题
95浏览 • 1回复 待解决
HarmonyOS lpx问题
159浏览 • 1回复 待解决
HarmonyOS ObjectLink问题
309浏览 • 1回复 待解决
HarmonyOS pushPath问题
106浏览 • 1回复 待解决
HarmonyOS openCustomDialog问题
128浏览 • 1回复 待解决
HarmonyOS 通知问题
58浏览 • 1回复 待解决
HarmonyOS Toggle问题
647浏览 • 0回复 待解决
HarmonyOS formKit问题
124浏览 • 1回复 待解决
HarmonyOS sid问题
35浏览 • 1回复 待解决
HarmonyOS 编译问题
216浏览 • 1回复 待解决
HarmonyOS this指向问题
146浏览 • 2回复 待解决
HarmonyOS setResponseData问题
491浏览 • 1回复 待解决
HarmonyOS RichText问题
55浏览 • 1回复 待解决
HarmonyOS TextInput问题
121浏览 • 1回复 待解决
HarmonyOS 卡片问题
273浏览 • 1回复 待解决
HarmonyOS UI问题
260浏览 • 1回复 待解决
HarmonyOS NumberFormat问题
95浏览 • 1回复 待解决