AntV X6制作画板工具(图形,线段,图片上传)

5 篇文章 0 订阅
3 篇文章 0 订阅

前后端配合问题总结:
1.使用upload上传组件时,需要在接口调用成功之后的函数中进行图片展示,action调用接口,formatter配合拿取后端接口返回的图片数据
2.upload内部只可包含一个标签元素否则会失效
3.保存画布元素之后,可能会出现img的url丢失的情况,请提前做好存值准备
4.使用input进行图片文件上传,需要将文件进行base64格式转换之后才可以在页面上成功展示(使用upload组件可忽略此条)

以下实例仅提供本地图片上传展示功能

一.用antv X6准备画布容器

(1). 官网antv x6

$ npm install @antv/x6 --save //下载使用x6

注明:详细使用请参考官方文档,此篇文章只对需要使用部分进行简单说明
(2).以react框架进行构造
实现思路

  • 先准备一个container容器
  • 准备数据(X6 支持 JSON 格式数据,该对象中需要有节点 nodes 和边 edges 字段,分别用数组表示)
  • 渲染画布
//画布准备
 const graph = new Graph({
        container: document.getElementById('container'),
        width: 900,
        height: 900,
        background: {
            color: '#fffbe6', // 设置画布背景颜色
        },
    })

二.在画布上进行节点渲染

//节点渲染,完整代码

import { Graph, Shape, Addon } from '@antv/x6';
import React from 'react';
import '@antv/x6-react-shape'


export default class PicturesWall extends React.Component {
   
    constructor(props) {
        super(props)
        this.state = {
            
          };
          this.graph=null
    }
 
  componentDidMount(){
    this.initGraph();
  }
  
  initContainer(container){
    this.container = container || {}
  }

  initGraph() {
    //创建画布
    const graph = new Graph({
        container: document.getElementById('container'),
        width: 900,
        height: 900,
        background: {
            color: '#fffbe6', // 设置画布背景颜色
        },
    })

    Graph.registerNode(
      'image',
      {
        width: 240,
        height: 40,
        inherit: 'react-shape',
        preserveAspectRatio: true,
        component: <img />,
        attrs: {
          body: {
            fill: 'none',
            stroke: 'none',
          },
         },
      },
      true, );  
    this.graph = graph
  }



  addSquare=()=>{
    this.graph.addNode({
      shape: 'rect',
      x: 40,
      y: 40,
      width: 50,
      height: 50,
      attrs:{
        body: {
          fill: 'transparent',
          stroke: '#aaaa',
        },
      }//attrs是用来对节点定义样式的
    })
  }

  addLine=()=>{
    this.graph.addEdge({
      source: { x: 100, y: 40 },
      target: { x: 400, y: 40 },
      attrs: {
        line: {
          stroke: "#7c68fc", // 指定 path 元素的填充色
        },
      },
    })
  }

  handleChange = (event) => {
    let imgfile = event.currentTarget.files[0];///获得input的第一个图片
    let _this = this
    //使用readAsDataURL来进行回显图片
    let reader = new FileReader();
    reader.readAsDataURL(imgfile);

    reader.onload = function (event) {//会触发一个load事件
        let imgs = this.result
        console.log('回显的Base64图片文件',imgs)
        _this.graph.addNode({
          shape: 'image',
          x: 40,
          y: 40,
          width: 50,
          height: 50,
          component:  <img src={imgs} style={{ width: '40px', height: '40px' }} />
        })

    };
    
}

  render() {
    const { previewVisible, previewImage, fileList } = this.state;

    return (
      <div className="clearfix">
        {/* <div 
        id="container-wrap"
        ref={this.initContainer}
        /> */}
        <div style={{display:'flex'}}>
          <div 
          style={{width: '50px', height:'20px',background:'#aaa', cursor:'pointer'}}
          onClick={this.addSquare}
          >
            正方形
          </div>
          <div 
          style={{width: '35px', height:'20px',background:'#aaa', cursor:'pointer',marginLeft:'5px'}}
          onClick={this.addLine}
          >
            线段
          </div>
          <div 
          style={{width: '70px', height:'20px',background:'#aaa', cursor:'pointer',marginLeft:'5px'}}
          >
            <label class="control-label file" style={{position:'relative' ,width:'70px'}}>
            <input  type='file' accept='image/png' onChange={this.handleChange} 
             style={{ position: 'absolute',fontSize: '18px',right: 0,top: 0,opacity: 0,width:'100%'}}/>
              点击上传
            </label>
           
          </div>
        </div>
        <div id='container'></div>
      </div>
    );
  }
}


结果展示
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ANTV X6 是一款由 ANT Design 团队开发的编辑器。这个编辑器具备强大的功能和易于使用的界面,能够满足用户对于编辑的各种需求。 ANTV X6 提供了丰富的绘图能力,可以绘制各种类型的图表,包括折线图、柱状图、饼状图等等。用户可以通过拖拽、缩放、旋转等操作来编辑和调整图表的样式,使得图表能够更好地呈现数据。 同时,ANTV X6 还支持数据的导入和导出,用户可以方便地将数据导入编辑器进行图表的制作和编辑,也可以将编辑好的图表导出为常见的图片格式或者SVG格式。 除了绘图功能,ANTV X6 还提供了交互式的编辑功能,用户可以通过简单的点击、拖拽等操作来添加和编辑图表的元素,包括文字、箭头、形状等等。编辑器还支持图层管理,用户可以方便地调整元素的层级关系,使得绘制出的图表更加清晰和有层次感。 ANTV X6 的界面简洁明了,操作流畅,轻松上手。用户可以根据自己的需求来自定义编辑器的布局和工具栏的位置,使得编辑器更符合个人习惯。 总之,ANTV X6 是一款功能强大、界面友好的编辑器,可以满足用户对于图表编辑的各种需求,并且具备良好的扩展性和可定制性,是一款非常实用的编辑器工具。 ### 回答2: ANTV X6是一款功能强大的编辑器,主要用于多媒体内容的制作和编辑。它具有丰富的功能和易于使用的界面,适用于各种不同的创作需求。 首先,ANTV X6提供了多种多样的编辑工具,包括文字编辑、图像编辑、音频编辑和视频编辑等。用户可以通过这些工具对媒体内容进行修改、调整和优化,以创作出符合自己需求的作品。 其次,ANTV X6还具备了较高的灵活性和自由度。用户可以根据自己的创作意图自由调整和定制各种编辑参数,以便更好地表达自己的想法和创意。 此外,ANTV X6还提供了丰富的特效和过渡效果,用户可以轻松地将这些效果应用到自己的作品中,增强作品的视觉冲击力和观赏性。 最后,ANTV X6还具备强大的导出和分享功能。用户可以将自己的作品导出为各种常见的媒体格式,如图片、视频或音频文件等。同时,ANTV X6还支持将作品直接分享到社交媒体平台,方便用户与他人分享和展示自己的创作成果。 总体来说,ANTV X6是一款功能强大、易于使用的编辑器,适用于各种创作需求。无论是制作短视频、编辑音频还是设计海报,ANTV X6都能帮助用户轻松实现自己的创意。它为用户提供了丰富的编辑工具、灵活的调整参数、多样的特效和过渡效果,以及便捷的导出和分享功能,让用户能够创作出高质量的多媒体作品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值