HarmonyOS ImageData问题

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

HarmonyOS
6天前
浏览
收藏 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
微信
回复
6天前
相关问题
HarmonyOS Toggle问题
315浏览 • 0回复 待解决
HarmonyOS setResponseData问题
280浏览 • 1回复 待解决
HarmonyOS gridcell问题
166浏览 • 1回复 待解决
HarmonyOS startAbility问题
270浏览 • 1回复 待解决
HarmonyOS CustomDialogController问题
255浏览 • 1回复 待解决
HarmonyOS interface 问题
175浏览 • 1回复 待解决
HarmonyOS soundPool问题
76浏览 • 1回复 待解决
HarmonyOS HarmonyOS社区组件问题
174浏览 • 1回复 待解决
HarmonyOS录音报错问题
406浏览 • 1回复 待解决
HarmonyOS struct全屏问题
157浏览 • 1回复 待解决
HarmonyOS echarts图标问题
207浏览 • 1回复 待解决
HarmonyOS notifyDataAdd失效问题
293浏览 • 0回复 待解决
HarmonyOS AVPlayer的问题
336浏览 • 1回复 待解决
HarmonyOS soundpool使用问题
314浏览 • 1回复 待解决
HarmonyOS Navigation使用问题
290浏览 • 1回复 待解决
HarmonyOS resourceManager使用问题
325浏览 • 1回复 待解决
HarmonyOS Navigation 使用问题
319浏览 • 1回复 待解决
HarmonyOS上传文件问题
328浏览 • 1回复 待解决
HarmonyOS 事件穿透问题
381浏览 • 1回复 待解决
HarmonyOS router 返回问题
160浏览 • 1回复 待解决
HarmonyOS viewModal demo问题
277浏览 • 1回复 待解决
HarmonyOS router跳转问题
386浏览 • 2回复 待解决
HarmonyOS 消息推送问题
233浏览 • 1回复 待解决
HarmonyOS CustomDialogController组件问题
275浏览 • 1回复 待解决
HarmonyOS 开发@Prop问题
238浏览 • 1回复 待解决