最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue如何將當(dāng)前窗口截圖并將數(shù)據(jù)base64轉(zhuǎn)為png格式傳給服務(wù)器

 更新時(shí)間:2023年10月11日 14:42:58   作者:vanora1111  
這篇文章主要介紹了Vue如何將當(dāng)前窗口截圖并將數(shù)據(jù)base64轉(zhuǎn)為png格式傳給服務(wù)器,通過(guò)實(shí)例代碼介紹了將當(dāng)前窗口截圖,并將數(shù)據(jù)存儲(chǔ)下來(lái),需要的朋友可以參考下

前言

記錄來(lái)源于需求

1、將當(dāng)前窗口截圖,并將數(shù)據(jù)存儲(chǔ)下來(lái)

export default {
data() {
 return {
   image: '' // 存儲(chǔ)數(shù)據(jù)
  }
}
 mounted() {
  setTimeout(() => {
      // 拿到當(dāng)前dom里 你需要截取的位置的id
      const dom = document.querySelector("#cesium canvas");
      if (dom) {
        // 將選擇的dom元素轉(zhuǎn)換為PNG格式的DataURL字符串,打印出來(lái)是base64數(shù)據(jù)
        this.image = dom.toDataURL("image/png");
      }
   },500)
 }
}

2、定義將base64轉(zhuǎn)png的方法

methods: {
     base64ImgtoFile(dataurl, filename = "file") {
      return new Promise((resolve, reject) => {
        const image = new Image();
        image.src = dataurl;
        image.onload = () => {
          const canvas = document.createElement("canvas");
          canvas.width = image.width;
          canvas.height = image.height;
          const context = canvas.getContext("2d");
          context.drawImage(image, 0, 0);
          canvas.toBlob((blob) => {
            const file = new File([blob], `${filename}.png`, {
              type: "image/png"
            });
            resolve(file);
          }, "image/png");
        };
        image.onerror = (error) => reject(error);
      });
    },
    async convertBase64ToPNG(dataurl, fileName) {
      try {
        const file = await this.base64ImgtoFile(dataurl, fileName);
        // 使用轉(zhuǎn)換后的文件進(jìn)行后續(xù)操作
        return file;
      } catch (error) {
        console.error(error);
      }
    },
}

3、完整代碼

<template>
  <el-button @click="handleSaveMap">提交</el-button>
</template>
<script>
export default {
  data() {
    return {
      image: "" // 存儲(chǔ)數(shù)據(jù)
    };
  },
  mounted() {
    setTimeout(() => {
      // 拿到當(dāng)前dom里 你需要截取的位置的id
      const dom = document.querySelector("#cesium canvas");
      if (dom) {
        // 將選擇的dom元素轉(zhuǎn)換為PNG格式的DataURL字符串,打印出來(lái)是base64數(shù)據(jù)
        this.image = dom.toDataURL("image/png");
      }
    }, 500);
  },
  methods: {
    base64ImgtoFile(dataurl, filename = "file") {
      return new Promise((resolve, reject) => {
        const image = new Image();
        image.src = dataurl;
        image.onload = () => {
          const canvas = document.createElement("canvas");
          canvas.width = image.width;
          canvas.height = image.height;
          const context = canvas.getContext("2d");
          context.drawImage(image, 0, 0);
          canvas.toBlob((blob) => {
            const file = new File([blob], `${filename}.png`, {
              type: "image/png"
            });
            resolve(file);
          }, "image/png");
        };
        image.onerror = (error) => reject(error);
      });
    },
    async convertBase64ToPNG(dataurl, fileName) {
      try {
        const file = await this.base64ImgtoFile(dataurl, fileName);
        // 使用轉(zhuǎn)換后的文件進(jìn)行后續(xù)操作
        return file;
      } catch (error) {
        console.error(error);
      }
    },
    // 存儲(chǔ)數(shù)據(jù)到服務(wù)端
    async generateImages(image) {
      const file = new FileReader(); // 創(chuàng)建對(duì)象
      file.readAsDataURL(image); // 讀取文件
      const res = await uploadApi.uploadImage(image); // 對(duì)接上傳接口
      const { object, msg, success } = res.data;
      if (success) {
        this.areaPicture = object.key;
      } else this.$message.error(msg);
    },
    // 保存數(shù)據(jù)
    async handleSaveMap() {
      const loading = this.$loading({
        lock: true,
        text: "保存中,請(qǐng)稍后...",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)"
      });
      // 截取當(dāng)前窗口數(shù)據(jù)
      await this.screenshotView();
      // 轉(zhuǎn)換當(dāng)前base64圖片數(shù)據(jù)為png
      let image = await this.convertBase64ToPNG(this.image, this.mapName);
      // 存儲(chǔ)到服務(wù)端
      if (image) {
        await this.generateImages(image);
        console.log(this.areaPicture, "this.areaPicture");
      }
      loading.close();
    }
  }
};
</script>

總結(jié)

到此這篇關(guān)于在Vue里,將當(dāng)前窗口截圖,并將數(shù)據(jù)base64轉(zhuǎn)為png格式傳給服務(wù)器的文章就介紹到這了,更多相關(guān)Vue數(shù)據(jù)base64轉(zhuǎn)為png格式傳服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue如何監(jiān)聽(tīng)el-select選擇值的變化

    vue如何監(jiān)聽(tīng)el-select選擇值的變化

    這篇文章主要介紹了vue如何監(jiān)聽(tīng)el-select選擇值的變化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue?當(dāng)中組件之間共享數(shù)據(jù)的實(shí)現(xiàn)方式

    vue?當(dāng)中組件之間共享數(shù)據(jù)的實(shí)現(xiàn)方式

    這篇文章主要介紹了vue?當(dāng)中組件之間共享數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue使用websocket概念及示例

    vue使用websocket概念及示例

    這篇文章主要為大家介紹了vue使用websocket概念及示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 關(guān)于vxe-table復(fù)選框翻頁(yè)選中問(wèn)題及解決

    關(guān)于vxe-table復(fù)選框翻頁(yè)選中問(wèn)題及解決

    這篇文章主要介紹了關(guān)于vxe-table復(fù)選框翻頁(yè)選中問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue實(shí)現(xiàn)點(diǎn)擊出現(xiàn)操作彈出框的示例

    vue實(shí)現(xiàn)點(diǎn)擊出現(xiàn)操作彈出框的示例

    這篇文章主要介紹了vue實(shí)現(xiàn)點(diǎn)擊出現(xiàn)操作彈出框的示例,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-11-11
  • vue中使用微信公眾號(hào)js-sdk踩坑記錄

    vue中使用微信公眾號(hào)js-sdk踩坑記錄

    這篇文章主要介紹了vue中使用微信公眾號(hào)js-sdk踩坑記錄,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Vue如何使用混合Mixins和插件開(kāi)發(fā)詳解

    Vue如何使用混合Mixins和插件開(kāi)發(fā)詳解

    這篇文章主要介紹了Vue如何使用混合Mixins和插件開(kāi)發(fā)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Vue2.0父子組件傳遞函數(shù)的教程詳解

    Vue2.0父子組件傳遞函數(shù)的教程詳解

    這篇文章主要介紹了Vue2.0父子組件傳遞函數(shù)的教程詳解,需要的朋友可以參考下
    2017-10-10
  • 使用Capacitor將Vue項(xiàng)目轉(zhuǎn)換為Android App的操作步驟

    使用Capacitor將Vue項(xiàng)目轉(zhuǎn)換為Android App的操作步驟

    這篇文章主要介紹了如何將Vue項(xiàng)目轉(zhuǎn)換為Android應(yīng)用,包括設(shè)置開(kāi)發(fā)環(huán)境、打包Vue項(xiàng)目、安裝和配置Capacitor,以及如何處理網(wǎng)絡(luò)請(qǐng)求和配置圖標(biāo),此外,還包括了如何編譯生成APK文件和處理可能的錯(cuò)誤,需要的朋友可以參考下
    2025-10-10
  • 帶你了解前端的幾種包管理器(npm/pnpm等)

    帶你了解前端的幾種包管理器(npm/pnpm等)

    隨著前端工程化的應(yīng)用越來(lái)越廣,插件和包的管理也逐漸衍生出很多的管理器,常見(jiàn)的幾種包管理器如:npm、cnpm、yarn、pnpm,那你知道這些管理器之間有哪些區(qū)別嗎?我們一起來(lái)逐個(gè)認(rèn)識(shí)下它們
    2023-04-04

最新評(píng)論

新绛县| 靖宇县| 乐亭县| 新安县| 贡嘎县| 贵德县| 大庆市| 安国市| 龙山县| 泌阳县| 浙江省| 通化市| 新化县| 盈江县| 德昌县| 赣榆县| 宁晋县| 漠河县| 会同县| 固阳县| 金平| 府谷县| 饶平县| 时尚| 正蓝旗| 丹凤县| 金乡县| 涞水县| 界首市| 海原县| 正阳县| 吴川市| 龙山县| 资中县| 贺兰县| 灵台县| 饶河县| 平舆县| 济阳县| 肇州县| 肥乡县|