分享海报-链接图片如何处理

本文介绍了一种将远程图片链接转换为Base64格式的方法,并利用html2canvas实现网页截图功能以生成可下载的海报。通过Vue.js实现了前端逻辑,包括图片加载、Base64转换及海报下载等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 先将远程图片链接转为base64格式在页面上显示则可用html2canvas生成海报

canvasImg.js

// 第一个参数是图片的URL地址,第二个是转换成base64地址后要赋值给的img标签
export async function  getBase64Image (url) {
    return new Promise((resolve)=>{
        let image = new Image()
        image.src = url + '?v=' + Math.random(); // 处理缓存
        image.crossOrigin = '*'; // 支持跨域图片
        image.onload = function () {
            var base64 = drawBase64Image(image)
            resolve(base64)
        }
    })
}

<template>
  <div class="share-container" id="capture">
    <div
      class="share-img-box"
      :style="{ backgroundImage: `url(${share_bg})` }"
    ></div>
  </div>
</template>
<script>
import { defineComponent, reactive, toRefs } from "vue";

import share_bg from "/@/assets/imgs/work/share_bg.png";
import share_title from "/@/assets/imgs/work/share_title.png";
import dialog_close from "/@/assets/imgs/vote/dialog_close.png";
import html2canvas from "html2canvas";
import { Overlay, Toast } from "vant";
import useClipboard from "vue-clipboard3";
import { base64ToBlob, getBase64Image } from "/@/utils/canvasImg";
export default defineComponent({
  setup(props, { emit }) {
    const { toClipboard } = useClipboard();
    const copyLink = window.location.href;

    const onCopy = async () => {
      console.log("copy");
      try {
        await toClipboard(copyLink);
        Toast.success("复制链接成功");
      } catch (e) {
        Toast.fail(e);
      }
    };
    const state = reactive({
      imageUrl:
        "https://img2.baidu.com/it/u=716392730,3813815285&fm=253&fmt=auto&app=120&f=JPEG?w=667&h=500",
    });

    const setImgUrlToBase64 = () => {
      getBase64Image(state.imageUrl).then((res) => {
        state.imageUrl = res;
      });
    };
    setImgUrlToBase64();

    const downImg = () => {
      html2canvas(document.querySelector("#capture")).then(
        (canvas) => {
          document.body.appendChild(canvas);
          let saveUrl = canvas.toDataURL("image/png");
          let aLink = document.createElement("a");
          let blob = base64ToBlob(saveUrl);
          let evt = document.createEvent("MouseEvents");
          evt.initMouseEvent(
            "click",
            true,
            false,
            window,
            0,
            0,
            0,
            0,
            0,
            false,
            false,
            false,
            false,
            0,
            null
          );
          aLink.href = URL.createObjectURL(blob);
          aLink.download = "分享海报";
          aLink.dispatchEvent(evt);
          URL.revokeObjectURL(blob);
          Toast.success("下载成功");
        },
        {
          useCORS: true,
        }
      );
    };

    function onClose() {
      emit("on-close");
    }

    return {
      downImg,
      onCopy,
      dialog_close,
      share_bg,
      share_title,
      onClose,
      ...toRefs(state),
    };
  },
});
</script>
<style scoped lang="less">
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值