vue将unity的canvas转成图片,并上传后台

需求:将unity目前的窗口形成截图并将其上传至后台。连干4篇文章。太累了。废话就少说了。直接来解决方案。

首先,找到unity给的文件夹下的Build/Web.json。将"webglContextAttributes": {"preserveDrawingBuffer": false}, 改为"webglContextAttributes": {"preserveDrawingBuffer": true}, 这个主要是开放截图,不然截图是一片空白

这个改为true一开始是我手动改的,后期unity已经将这个属性动态配置,你也可以喊unity像我这个unity工程师一样,动态配置。

然后前端的操作开始。首先,html要写ref,如图:

 然后在方法里面写上内容。

methods:{
    // 得到初始视角
    getCutAngle() {
      const canvasId = this.$refs.iframes.contentDocument.getElementsByTagName('canvas')[0]
      const viewPicUrl = canvasId.toDataURL('image/png')
      this.$refs.iframes.contentWindow.unityInstance.SendMessage('WebInvoker', 'Unity_RequestCurrentView')// 发送初始化视角请求
      const currentImg = this.base64ToBlob(viewPicUrl) //将canvas转成的png转成base64的文件流上传
      this._ajax_uploadSmallFile(currentImg) //上传文件
    },
    // 将canvas的base64转为文件流
    base64ToBlob(urlData, type) {
      const arr = urlData.split(',')
      let mime, bytes
      if (arr && arr.length === 2) {
        mime = arr[0].match(/:(.*?);/)[1] || type
        // 去掉url的头,并转化为byte
        bytes = window.atob(arr[1])
      } else {
        mime = type
        // 去掉url的头,并转化为byte
        bytes = window.atob(arr[0])
      }
      // 处理异常,将ascii码小于0的转换为大于0
      const ab = new ArrayBuffer(bytes.length)
      // 生成视图(直接针对内存):8位无符号整数,长度1个字节
      const ia = new Uint8Array(ab)
      for (let i = 0; i < bytes.length; i++) {
        ia[i] = bytes.charCodeAt(i)
      }
      return new Blob([ab], {
        type: mime
      })
    },
}

将图片base64转为Blob(字节流),直接上传给后台。我这边的上传如图:

 上传就是用上传的formData上传啦。我们上传成功会返回路径显示。所以会有url赋值。至此,unity的canvas转为图片就完成了。

熬到两点,今晚都在写博客,平常写博客的时间没有,太忙了。所以抽空写多了些。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端上传 excel 文件并换成 JSON 格式可以通过以下步骤实现: 1. 引入 js-xlsx 库:js-xlsx 是一个用于读取和写入 Excel 文件的 JavaScript 库,可以通过 CDN 引入或者本地引入。 2. 创建 input 标签:在 HTML 页面中创建一个 input 标签,用于上传 Excel 文件。 3. 监听 input 标签的 change 事件:当用户选择文件并上传时,会触发 change 事件,我们可以在事件处理函数中读取文件内容并换为 JSON 格式。 4. 将 JSON 格式的数据提交给后台:可以使用 Axios 等库将 JSON 数据提交给后台。 下面是一个使用 Vue.js 实现上传 Excel 文件并换成 JSON 格式的示例: ```html <template> <div> <input type="file" @change="handleFileUpload"> <button @click="submitData">提交数据</button> </div> </template> <script> import XLSX from 'xlsx' import axios from 'axios' export default { data() { return { jsonData: null } }, methods: { handleFileUpload(event) { const file = event.target.files[0] const reader = new FileReader() reader.onload = (e) => { const data = e.target.result const workbook = XLSX.read(data, { type: 'binary' }) const worksheet = workbook.Sheets[workbook.SheetNames[0]] this.jsonData = XLSX.utils.sheet_to_json(worksheet) } reader.readAsBinaryString(file) }, async submitData() { try { const response = await axios.post('/api/upload', this.jsonData) console.log(response.data) } catch (error) { console.error(error) } } } } </script> ``` 在上面的示例中,我们首先在 Vue 组件中引入了 js-xlsx 和 axios 库。在模板中,我们创建了一个 input 标签和一个提交按钮。当用户选择文件并上传时,会触发 handleFileUpload 方法,该方法使用 FileReader API 将文件内容读取为二进制字符串,然后使用 js-xlsx 库解析 Excel 文件并换为 JSON 格式。在 submitData 方法中,我们使用 axios 库将 JSON 数据提交给后台接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值