微信小程序:使用canvas 生成图片 并分享

这篇具有很好参考价值的文章主要介绍了微信小程序:使用canvas 生成图片 并分享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

废话不多说直接上代码!!!!

html

 <canvas canvas-id="positionPoster" style="width: 414px; height: 672px; margin: 0; padding: 0;" v-if="isCanvas"></canvas>

js

// 1、canvas对象 2、文本 3、X轴 4、Y轴 5、单行行高 6、文本的宽度
     */
    toFormateStr(ctx, str, axisX, axisY, titleHeight, maxWidth) {
      // 字体
      ctx.setFontSize(14 * this.rpx);
      // 颜色
      ctx.setFillStyle("#353535");
      // 文本处理
      let strArr = str.split("");
      let row = [];
      let temp = "";
      for (let i = 0; i < strArr.length; i++) {
        if (ctx.measureText(temp).width < maxWidth) {
          temp += strArr[i];
        } else {
          i--; //这里添加了i-- 是为了防止字符丢失,效果图中有对比
          row.push(temp);
          temp = "";
        }
      }
      row.push(temp); // row有多少项则就有多少行

      //如果数组长度大于2,现在只需要显示两行则只截取前两项,把第二行结尾设置成'...'
      if (row.length > 2) {
        let rowCut = row.slice(0, 2);
        let rowPart = rowCut[1];
        let test = "";
        let empty = [];
        for (let i = 0; i < rowPart.length; i++) {
          if (ctx.measureText(test).width < maxWidth) {
            test += rowPart[i];
          } else {
            break;
          }
        }
        empty.push(test);
        let group = empty[0] + "..."; //这里只显示两行,超出的用...表示
        rowCut.splice(1, 1, group);
        row = rowCut;
      }
      // 把文本绘制到画布中
      for (let i = 0; i < row.length; i++) {
        // 一次渲染一行
        ctx.fillText(row[i], axisX, axisY + i * titleHeight, maxWidth);
      }
      // // 保存当前画布状态
      // ctx.save();
      // // 将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。
      // ctx.draw();
    },
    //分享绘制
    shareImg() {
      this.isCanvas = true;
      wx.showLoading({
        title: "保存中...",
      });
      var that = this;
      let nickName = wx.getStorageSync("user")["nickName"];
      var context = wx.createCanvasContext("positionPoster");
      context.beginPath();

      context.fillStyle = "white";
      context.fillRect(0, 0, that.screenWidth, that.screenHeight);

      context.font = "14px sans-serif";
      context.fillStyle = "black";
      context.fillText(
        `${nickName}  推荐给你${that.detail.name}学院`,
        50,
        35,
        250
      );
      context.font = "14px sans-serif";
      context.fillStyle = "black";
      context.fillText(
        `已经有${that.detail.focusNum}个同学都在关注了`,
        50,
        65,
        250
      );

      context.font = "bold 16px sans-serif";
      context.fillStyle = "black";
      context.fillText(`${that.detail.name}`, 50, 100, 250);

      //绘制一个圆角矩形
      context.setStrokeStyle("black");
      context.strokeRect(50, 115, 150, 20);

      context.font = "14px sans-serif";
      context.fillStyle = "black";
      context.fillText(
        `${that.detail.stateRun},${that.detail.is211 ? "211" : ""},${
          that.detail.is985 ? "985" : ""
        },${that.detail.doubleFirstClass ? "双一流" : ""}`,
        55,
        130,
        150
      );
      context.font = "16px bold";
      context.fillText(`简介`, 50, 160, 70);
      //多行显示
      that.toFormateStr(context, that.detail.introduce, 50, 185, 24, 300);
      context.font = "14px sans-serif";
      context.fillStyle = "black";
      let y = 240;
      const y_text = 260;
      context.fillText(`成立时间`, 50, y, 100);

      context.font = "14px sans-serif";
      context.fillStyle = "black";
      context.fillText(`关注人数`, 170, y, 100);

      context.font = "14px sans-serif";
      context.fillStyle = "black";
      context.fillText(`报考人数`, 270, y, 130);

      context.font = "14px sans-serif";
      context.fillStyle = "black";
      context.fillText(
        `${that.detail.time ? that.detail.time : "--"}`,
        60,
        y_text,
        100
      );

      context.font = "14px sans-serif";
      context.fillStyle = "black";
      context.fillText(
        `${that.detail.focusNum ? that.detail.focusNum : "暂无"}`,
        180,
        y_text,
        100
      );

      context.font = "14px sans-serif";
      context.fillStyle = "black";
      context.fillText(
        `已有${that.detail.examNum ? that.detail.examNum + "人" : "暂无"}`,
        `${that.detail.examNum ? y_text : 305}`,
        y_text,
        130
      );
      //画图二维码
      context.drawImage(that.drImg, 80, 300, 250, 250);

      context.draw(false, function () {
        wx.canvasToTempFilePath({
          x: 0,
          y: 0,
          width: that.screenWidth,
          height: that.screenHeight,
          destWidth: that.screenWidth * that.pixelRatio, 
          destHeight: that.screenHeight * that.pixelRatio, 
          canvasId: "positionPoster",
          success: function (res) {
            that.saveImage = res.tempFilePath;
            if (!res.tempFilePath) {
              wx.showModal({
                title: "提示",
                content: "图片绘制中,请稍后重试",
                showCancel: false,
              });
            }
            //画板路径保存成功后,调用方法吧图片保存到用户相册
            wx.saveImageToPhotosAlbum({
              filePath: res.tempFilePath,
              //保存成功失败之后,都要隐藏画板,否则影响界面显示。
              success: (res) => {
                wx.hideLoading();
                that.isShow = false;
                that.isCanvas = false;
                Toast.success({ message: "保存成功!" });
              },
              fail: (err) => {
                console.log(err);
                wx.hideLoading();
                that.isShow = false;
                that.isCanvas = false;
              },
            });
          },
          fail: (res) => {
            wx.hideLoading();
            that.isShow = false;
            console.log(res);
          },
        });
      });
    },

最终效果图

微信小程序:使用canvas 生成图片 并分享

 文章来源地址https://www.toymoban.com/news/detail-514870.html

到了这里,关于微信小程序:使用canvas 生成图片 并分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序-生成canvas图片并保存到手机相册

    wxml页面 wxss页面 js代码

    2024年02月10日
    浏览(41)
  • 微信小程序使用canvas绘制网络图片,使用canvas将图片变成圆形

    以上的写法 会造成某些图标无法绘制上去, 解决方法是在网络图片中不断嵌套,先绘制大图片,再绘制小图片的顺序 网上说使用先下载到本地,再使用img.src加载,我尝试过还是不行 长用在海报,需要将用户的头像画到canvas图片上,如: 其原理就是在图片上面放一个圆

    2024年02月13日
    浏览(44)
  • uni-app 微信小程序 图文生成图片 wxml-to-canvas

    在做的小程序要增加一个将文字与图片生成图片不可修改的功能,第一次做,在网上找了不少资料。参考了wxml-to-canvas | 微信开放文档  ,又看了一些相关事例,尝试写了一下。   需要准备的文件及配置项: 1、先把代码片段下载到本地 2、创建wxcomponents目录,把代码片段中的

    2024年02月09日
    浏览(32)
  • 微信小程序canvas type=2d生成海报保存到相册、文字换行溢出显示...、文字删除线、分享面板

    做个简单的生成二维码海报分享, 我做的时候也找简单的方法看能不能实现页面直接截图那种生成图片,原生小程序不支持, 不多介绍下面有全部代码有注释、参数自行替换运行看看,还有需要优化的地方,有问题可以咨询我,我写的已经上线 如图:

    2024年02月11日
    浏览(32)
  • uniapp微信小程序使用canvas自定义分享名片

    template js 需要分享的页面加上onShareAppMessage,在methods中定义绘画方法createCanvasImage css这里是画布的内容设置

    2024年02月14日
    浏览(32)
  • 在H5、微信小程序中使用canvas绘制二维码、分享海报

    提示:绘制二维码的插件有很多,有些仅支持H5,有些只适用微信小程序,故读者在使用二维码插件前需要先查看插件官方文档,查看其支持的环境 H5中安装qrious插件 引入qrious canvas模板 初始化canvas 二维码绘制并渲染 微信小程序中安装weapp-qrcode插件 引入weapp-qrcode canvas模板

    2024年02月14日
    浏览(34)
  • uniapp 微信小程序 动态生成海报分享朋友圈,需先保存图片

    直接拷贝代码,不使用插件,自己纯代码实现。 从相册 或拍照 选择一个图片做海报背景。 大吉大利 今晚吃鸡。

    2024年02月11日
    浏览(55)
  • 使用wxml2canvas将微信小程序页面转为图片

    最近有个微信小程序项目,需要将页面转为图片。微信小程序提供的Api是 wx.canvasToTempFilePath ,这个方法是将画布指定区域的内容导出生成指定大小的图片,但是我们是将页面导出图片,所以可以使用wxml2canvas解决 1、安装wxml2canvas npm init 是npm初始化,这个时候根据编译器终端

    2023年04月16日
    浏览(26)
  • uniapp中使用canvas,在微信小程序中实现图片缩放移动涂鸦文字

    最近需要一个功能,在微信中编辑图片,实现对图片的涂鸦、加文字、缩放、移动,以下基本能实现该功能。 uniapp中使用画布,实现图片的编辑-批量批改图片 1.初始化画布图片,图片是网络图片,非本地图片,所以需要先获取图片信息,直接使用uni.getImageInfo(如果是本地图

    2024年04月14日
    浏览(38)
  • 微信小程序海报插件Painter 2.0(canvas画图)使用并保存图片到相册案例

    Painter通过 json 数据形式,来进行动态渲染并绘制出图片。 Painter 的优势 功能全,支持文本、图片、矩形、qrcode 类型的 view 绘制 布局全,支持多种布局方式,如 align(对齐方式)、rotate(旋转) 支持圆角,其中图片,矩形,和整个画布支持 borderRadius 来设置圆角 支持边框,

    2024年01月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包