【鸿蒙实战开发】如何将SVG插入到画布中

本文会详细介绍如何将矢量图(SVG)插入画布,矢量图需要被编码为base64,然后直接保存到js代码中。如显示动物列表的js代码如下图所示:
image.png

每一个svg是一个数组元素。最终的SVG显示界面如下图所示。
image.png

这个界面是使用InsertImages组件实现的。。

InsertImages类实现的详细解释与注释

代码解释

这段代码实现了一个用于选择图像的组件 InsertImages。该组件由一组按钮和一个Webview组成,按钮用于选择不同的图像类别,Webview用于显示图像列表。用户可以点击按钮从不同的图像类别中选择图像,并将选择的结果通过回调函数返回。

详细代码注释
// 从相对路径引入常量,这些常量定义了一些面板和按钮的背景颜色
import { PANEL_BACKGROUND_COLOR, PANEL_BUTTON_BACKGROUND_COLOR } from '../common/const'

// 引入ArkWeb中的webview模块
import { webview } from '@kit.ArkWeb';

// 引入常用的工具函数,如去除引号
import { trimQuotes } from '../common/common';

// 使用@Entry标记这个组件为入口组件
@Entry

// 声明一个组件InsertImages
@Component
export struct InsertImages {

  // 可选的回调函数,当选择图像时触发,传递图像列表的名称和索引
  imageSelected?: (imageListName: string, imageListIndex: number) => void;

  // 可选的回调函数,当图像列表关闭时触发
  imageListClosed?: () => void;

  // 声明一个WebviewController,用于控制Webview组件
  controller1: webview.WebviewController = new webview.WebviewController();

  // 声明一个状态变量formatName,用于存储格式名称
  @State formatName: string = '';

  // build方法定义了组件的UI结构
  build() {
    // 创建一个Column组件,用于垂直布局
    Column() {

      // 创建一个Row组件,用于水平布局
      Row() {

        // 再次创建一个Column组件,内嵌的Column,用于放置多个按钮
        Column() {

          // 创建一个Row组件,用于放置选择按钮和关闭图标
          Row() {

            // 创建一个按钮组件,用于触发选择图像的操作
            Button({ type: ButtonType.Normal }) {
              // 按钮内部的文本
              Text('选择')
                .fontSize(16) // 设置字体大小
                .fontColor('#FFFFFF') // 设置字体颜色
                .width('100%') // 设置宽度为100%
                .height('100%') // 设置高度为100%
                .textAlign(TextAlign.Center) // 设置文本居中对齐
            }
            .borderRadius(5) // 设置按钮的圆角半径
            .width(60) // 设置按钮的宽度
            .height(30) // 设置按钮的高度
            .backgroundColor('#CC0000') // 设置按钮的背景颜色
            .onClick(() => { // 设置按钮点击事件

              // 调用Webview中的JavaScript函数获取选中的图像数据
              this.controller1.runJavaScript(`getSelectedImageData()`)
                .then(data => {

                  if (data === '') { // 如果没有选中任何图像
                    // 显示一个提示对话框,告知用户未选择图像
                    AlertDialog.show({
                      message: '还没有选择图像',
                      alignment: DialogAlignment.Center,
                      primaryButton: {
                        value: '关闭',
                        action: () => {
                          // 对话框关闭时不执行任何操作
                        }
                      }
                    })
                  } else {

                    // 将返回的JSON字符串解析为数组
                    let parsedArray: [string, number];
                    try {
                      parsedArray = JSON.parse(data);
                      // 提取图像列表名称和索引
                      let imageListName: string = parsedArray[0];
                      let imageListIndex: number = parsedArray[1];

                      // 如果imageSelected回调函数存在,则调用该回调函数
                      if (this.imageSelected) {
                      
Fabric.js是一个强大的JavaScript库,用于在HTML5画布上创建和操作图形对象。它支持多种图形对象,包括SVG。使用Fabric.js将SVG添加到画布上非常简单。以下是一些基本步骤和示例代码: 1. **引入Fabric.js库**: 首先,你需要在HTML文件中引入Fabric.js库。 ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.2.4/fabric.min.js"></script> ``` 2. **创建画布**: 在HTML文件中创建一个画布元素。 ```html <canvas id="canvas" width="800" height="600"></canvas> ``` 3. **初始化画布**: 使用JavaScript初始化Fabric.js画布。 ```javascript var canvas = new fabric.Canvas('canvas'); ``` 4. **加载SVG并添加到画布**: 使用`fabric.loadSVGFromURL`方法加载SVG文件并将其添加到画布上。 ```javascript fabric.loadSVGFromURL('path/to/your/image.svg', function(objects, options) { var obj = fabric.util.groupSVGElements(objects, options); canvas.add(obj).renderAll(); obj.center(); }); ``` 这段代码会加载指定路径的SVG文件,并将其添加到画布上。然后,它会居中显示在画布上。 完整示例代码如下: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Fabric.js SVG Example</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.2.4/fabric.min.js"></script> </head> <body> <canvas id="canvas" width="800" height="600"></canvas> <script> var canvas = new fabric.Canvas('canvas'); fabric.loadSVGFromURL('path/to/your/image.svg', function(objects, options) { var obj = fabric.util.groupSVGElements(objects, options); canvas.add(obj).renderAll(); obj.center(); }); </script> </body> </html> ``` 通过以上步骤,你可以轻松地将SVG图形添加到Fabric.js画布上并进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值