uniapp 利用canvas生成卡片,保存到相册

<template>
  <view>
    <button @click="generateCard">生成卡片</button>
    <canvas canvas-id="myCanvas" style="width: 300px; height: 500px;"></canvas>
    <uni-popup ref="popup" type="center">
      <image :src="generateImg" mode="scaleToFill" style="width: 300px; height: 500px;" />
      <button @click="saveCard">保存相册</button>
    </uni-popup>
  </view>
</template>

<script>
export default {
  data() {
    return {
      generateImg: "",// 生成的图片
    };
  },
  onReady() {},
  methods: {
    // 生成卡片
    generateCard() {
      // 生成画布
      this.createCanvas();
      // 生成图片
      uni.canvasToTempFilePath(
        {
          canvasId: "myCanvas",
          success: (res) => {
            this.generateImg = res.tempFilePath;
          },
        },
        this
      );
      // 打开弹窗
      this.$refs.popup.open();
    },
    // 生成画布
    createCanvas() {
      // 创建画布
      const ctx = uni.createCanvasContext("myCanvas", this);
      // 背景图
      ctx.drawImage("/static/bg1.png", 0, 0, 300, 500);
      ctx.drawImage("/static/bg2.png", 0, 250, 300, 250);
      // 标题:早
      ctx.setTextAlign("center");
      ctx.setFillStyle("#fff");
      ctx.setFontSize(30);
      ctx.fillText("早", 150, 50);
      // 标题:安
      ctx.setTextAlign("center");
      ctx.setFillStyle("#fff");
      ctx.setFontSize(30);
      ctx.fillText("安", 150, 90);
      // 鸡汤标题
      ctx.setTextAlign("left");
      ctx.setFontSize(14);
      ctx.setFillStyle("#000");
      ctx.fillText("心灵鸡汤", 10, 350);
      // 鸡汤内容
      ctx.setFontSize(12);
      ctx.setFillStyle("#000");
      ctx.fillText("人生是一场旅行,不要为短暂的困苦而停下脚步", 10, 370);
      // 用户头像
      ctx.drawImage("/static/ava.png", 15, 450, 30, 30);
      // 用户信息
      ctx.setTextAlign("left");
      ctx.setFontSize(10);
      ctx.setFillStyle("#000");
      ctx.fillText("微信用户", 50, 460);
      ctx.setFillStyle("#3767e2");
      ctx.setFontSize(10);
      ctx.fillText("小明", 50, 475);
      // 二维码
      ctx.drawImage("/static/qrcode.png", 200, 410, 80, 80);
      // 画到画布上
      ctx.draw();
    },
    // 保存到相册
    saveCard() {
      uni.saveImageToPhotosAlbum({
        filePath: this.img,
        success: () => {
          uni.showToast({
            title: "保存成功",
            icon: "none",
          });
        },
      });
    },
  },
};
</script>

<style></style>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值