lsc 2 年之前
父节点
当前提交
80644c6f0e

+ 1 - 1
dist/index.html

@@ -25,4 +25,4 @@
       height: 100%;
       width: 100%;
       background: #e6eaf0;
-    }</style><link href=./static/css/app.7ee3b8878153ad95f5cfef545db22ae8.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.e273944997929f2fdcfd.js></script><script type=text/javascript src=./static/js/app.fbcd72085225521df932.js></script></body></html><script>document.domain = document.domain.split(".").slice(-2).join(".");</script>
+    }</style><link href=./static/css/app.0def453fcaf883141b4611df5adb4d19.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.54137663e2d4743b49a8.js></script><script type=text/javascript src=./static/js/app.12713ad4b276409c26f9.js></script></body></html><script>document.domain = document.domain.split(".").slice(-2).join(".");</script>

文件差异内容过多而无法显示
+ 0 - 0
dist/static/css/app.0def453fcaf883141b4611df5adb4d19.css


文件差异内容过多而无法显示
+ 0 - 0
dist/static/css/app.0def453fcaf883141b4611df5adb4d19.css.map


文件差异内容过多而无法显示
+ 0 - 0
dist/static/js/app.12713ad4b276409c26f9.js


文件差异内容过多而无法显示
+ 0 - 0
dist/static/js/app.12713ad4b276409c26f9.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/static/js/app.fbcd72085225521df932.js


文件差异内容过多而无法显示
+ 0 - 0
dist/static/js/app.fbcd72085225521df932.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/static/js/vendor.54137663e2d4743b49a8.js


文件差异内容过多而无法显示
+ 0 - 0
dist/static/js/vendor.54137663e2d4743b49a8.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/static/js/vendor.e273944997929f2fdcfd.js


文件差异内容过多而无法显示
+ 18038 - 1
package-lock.json


+ 1 - 0
package.json

@@ -19,6 +19,7 @@
     "file-saver": "^2.0.5",
     "hevue-img-preview": "^5.0.3",
     "html-docx-js": "^0.3.1",
+    "html2canvas": "^1.4.1",
     "jquery": "^3.6.0",
     "js-audio-recorder": "^1.0.7",
     "js-pinyin": "^0.1.9",

+ 66 - 1
src/components/pages/demo.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div ref="board">
     <div>{{ $store.state.userInfo }}</div>
     <div>
       <el-cascader
@@ -12,11 +12,22 @@
       >
       </el-cascader>
     </div>
+    <img
+      data-v-bea0d8aa=""
+      id="img1"
+      ref="img1"
+      src="https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/演讲视角21668660541446.jpg?v=1668838015869"
+    />
+    <canvas id="ctx_back" ref="ctx_back"></canvas>
+    <el-button type="primary" size="default" @click="handleSave"
+      >保存</el-button
+    >
   </div>
 </template>
 
 <script>
 import { regionData, CodeToText } from "element-china-area-data";
+import html2canvas from "html2canvas";
 const Data = regionData.filter((ele) => {
   return ele.value == "440000";
 });
@@ -26,6 +37,8 @@ export default {
       options: Data[0].children,
       selectedOptions: [], //"440000","440100"
       loc: "",
+      canvas_base: null,
+      ctx_base: null,
     };
   },
   methods: {
@@ -41,8 +54,60 @@ export default {
       console.log(this.selectedOptions);
       this.loc = "广东省" + loc;
     },
+    handleSave() {
+      // let url = this.$refs.board;
+      // 手动创建一个 canvas 标签
+      const canvas = document.createElement("canvas");
+      // 获取父标签,意思是这个标签内的 DOM 元素生成图片
+      // imageTofile是给截图范围内的父级元素自定义的ref名称
+      let canvasBox = this.$refs.board;
+      // 获取父级的宽高
+      const width = parseInt(window.getComputedStyle(canvasBox).width);
+      const height = parseInt(window.getComputedStyle(canvasBox).height);
+      // 宽高 * 2 并放大 2 倍 是为了防止图片模糊
+      canvas.width = width * 2;
+      canvas.height = height * 2;
+      canvas.style.width = width + "px";
+      canvas.style.height = height + "px";
+      const context = canvas.getContext("2d");
+      context.scale(2, 2);
+      const options = {
+        backgroundColor: null,
+        canvas: canvas,
+        useCORS: true,
+        allowTaint: true,
+      };
+      var a = canvasBox.getElementsByTagName("img");
+      for (var i = 0; i < a.length; i++) {
+        a[i].crossOrigin = "anonymous";
+      }
+      let _this = this;
+      html2canvas(canvasBox, {
+        backgroundColor: null,
+        canvas: canvas,
+        useCORS: true,
+        allowTaint: true,
+      }).then((canvas) => {
+        // toDataURL 图片格式转成 base64
+        let dataURL = canvas.toDataURL("image/png");
+        console.log(dataURL);
+      });
+    },
   },
   mounted() {
+    this.$nextTick(() => {
+      this.canvas_base = this.$refs.ctx_back;
+      this.ctx_base = this.canvas_base.getContext("2d");
+      let img = this.$refs.img1;
+      let _this = this
+      img.onload = function () {
+        let width = parseInt(this.width);
+        let height = parseInt(this.height);
+        _this.canvas_base.width = width;
+        _this.canvas_base.height = height;
+        _this.ctx_base.drawImage(this, 0, 0, width, height);
+      };
+    });
     console.log(this.$store);
   },
 };

部分文件因为文件数量过多而无法显示