• SVG转png图片并下载


    DOCTYPE html>
    <html>
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>svg转pngtitle>
      
      <link href="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.7/theme-chalk/index.min.css" rel="stylesheet">
      <style>
        * {
          margin: 0;
          padding: 0;
        }
    
        /* 取消input的上下箭头 */
        input::-webkit-inner-spin-button {
          -webkit-appearance: none !important;
        }
    
        input::-webkit-outer-spin-button {
          -webkit-appearance: none !important;
        }
    
        /*里面的代码可以根据自己需求去进行更改*/
        /* 设置滚动条的样式 */
        ::-webkit-scrollbar {
          width: 5px;
        }
    
        /* 滚动槽 */
        ::-webkit-scrollbar-track {
          -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.3);
          border-radius: 10px;
        }
    
        /* 滚动条滑块 */
        ::-webkit-scrollbar-thumb {
          border-radius: 10px;
          background: rgba(0, 0, 0, 0.1);
          -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5);
        }
    
        ::-webkit-scrollbar-thumb:window-inactive {
          background-color: rgb(221, 222, 225);
        }
    
        input[type="number"] {
          -moz-appearance: textfield;
        }
    
        #app {
          display: flex;
          flex-direction: column;
          width: 100%;
          height: 100vh;
          padding: 10px;
          box-sizing: border-box;
        }
    
        .svg-container {
          width: 100%;
          height: 100%;
          overflow: auto;
        }
      style>
    head>
    
    <body>
      <div id="app">
        <el-input type="textarea" :rows="8" placeholder="请输入内容" v-model="svgHtml" style="margin-bottom: 8px;" clearable
          @input="textareaChange">
        el-input>
        <el-form ref="form" inline>
          <el-form-item label="图片名称:">
            <el-input v-model="svgName" placeholder="默认【示例名称】" clearable>el-input>
          el-form-item>
          <el-form-item label="图片宽度:">{{width}}el-form-item>
          <el-form-item label="图片高度:">{{height}}el-form-item>
          <el-button type="primary" @click="handleExportPng">导出png图片el-button>
        el-form>
        <div class="svg-container" id="svgContainer" v-html="svgHtml">div>
      div>
    body>
    
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.min.js">script>
    
    <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.7/index.min.js">script>
    <script>
      new Vue({
        el: '#app',
        data: function () {
          return {
            svgName: '',
            svgHtml: '',
            width: '',
            height: ''
          }
        },
        methods: {
          textareaChange() {
            this.$nextTick(() => {
              let d = document.querySelector('#svgContainer').children[0]
              let s = /name="(\S+)"/g.exec(this.svgHtml)
              this.svgName = s && s[1] ? s[1] : ''
              this.width = d.clientWidth
              this.height = d.clientHeight
            })
          },
          handleExportPng() {
            let d = document.querySelector('#svgContainer').children[0]
            this.covertSVG2Image(d, this.svgName || '示例名称', this.width, this.height)
          },
          /**
    
            * 将svg导出成图片
    
            * @param node svg节点 => document.querySelector('svg')
    
            * @param name 生成的图片名称
    
            * @param width 生成的图片宽度
    
            * @param height 生成的图片高度
    
            * @param type 生成的图片类型
    
            */
          covertSVG2Image(node, name, width, height, type = 'png') {
    
            let serializer = new XMLSerializer()
    
            let source = '\r\n' + serializer.serializeToString(node)
    
            let image = new Image()
    
            image.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source)
    
            let canvas = document.createElement('canvas')
    
            canvas.width = width
    
            canvas.height = height
    
            let context = canvas.getContext('2d')
    
            context.fillStyle = '#fff'
    
            context.fillRect(0, 0, 10000, 10000)
    
            image.onload = function () {
    
              context.drawImage(image, 0, 0)
    
              let a = document.createElement('a')
    
              a.download = `${name}.${type}`
    
              a.href = canvas.toDataURL(`image/${type}`)
    
              a.click()
    
            }
    
          },
        }
      })
    script>
    
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
  • 相关阅读:
    php服装商城网站毕业设计源码241505
    搜索与图论:染色法判定二分图
    时机成熟,DC 社区成长
    数据库----- 数据库高级
    用户行为分析-阿里日志服务
    基于Selenium Grid搭建自动化并行执行环境
    CSS---经常被忽略,但使用广泛的常用CSS样式片段总结
    CVPR 2023 | UniMatch: 重新审视半监督语义分割中的强弱一致性
    【知识学习】简易OI/ACM竞赛测试环境lemon使用方法
    高复杂度的城市数字化转型“交响曲”,新华三如何奏响?
  • 原文地址:https://blog.csdn.net/qq_24504591/article/details/126056129