首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >小程序的页面生成图片分享朋友圈

小程序的页面生成图片分享朋友圈

作者头像
hotqin888
发布于 2018-10-15 03:38:27
发布于 2018-10-15 03:38:27
4.5K00
代码可运行
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏
运行总次数:0
代码可运行

主要的坑:

1.网络图片要下载到本地,就是getimginfo和promise,具体技术细节我也不晓得。然后就是本地图片的地址和网络图片的地址不同。本地的要加../../images/+res[0].path,而网络的直接是res[0].path。本机调试看不出来,用真机调试比较容易发现问题。

2.画布的位置,文字的位置,要慢慢调到合适。https://www.ifanr.com/minapp/925253

3.最关键的是,目前有极少的在小程序里用html2canvas的,都是直接把图片啊,文章里的文字啊,取过来,再画到画布上。这点看了很久才明白。比如这里https://blog.csdn.net/sufei_web/article/details/81736101

4.清晰度的问题。保存图片的时候,长度和高度乘以2就行了。https://www.csweigou.com/article/2209.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//获取应用实例
const app = getApp()

let wxparse = require("../../wxParse/wxParse.js");
Page({
  data: {
    dkheight: 300,
    dkcontent: "",
    leassonTilte: '',
    time: '',
    id: '',

    inputVal: '',
    msgData: [{
      msg: '极好的',
      index: 1,
      id: 1,
      name: "自强不息",
      likes: {
        num: 1
      },
      textareaValue: "输入留言"
    }],

    hidden: true,
    //画布
    canvasHidden: true, //设置画板的显示与隐藏,画板不隐藏会影响页面正常显示
    shareImgPath: '' //用于储存canvas生成的图片
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    // console.log(options)
    this.setData({
      id: options.id
    })
    // 获得高度
    let winPage = this;
    wx.getSystemInfo({
      success: function(res) {
        let winHeight = res.windowHeight;
        // console.log(winHeight);
        winPage.setData({
          dkheight: winHeight - winHeight * 0.05 - 80
        })
      }
    });

    var that = this;
    //获取用户设备信息,屏幕宽度
    wx.getSystemInfo({
      success: res => {
        that.setData({
          screenWidth: res.screenWidth
        })
        // console.log(that.data.screenWidth)
      }
    })
    var getData = wx.request({
      url: 'https://zsj.itdos.com/v1/wx/getwxarticle/' + options.id,
      // data: {
      // x: '',
      // y: ''
      // id: options.id
      // },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: function(res) {
        // console.log(res.data)
        that.setData({
          dkcontent: res.data.html,
          leassonTilte: res.data.title,
          time: res.data.time,
          author: res.data.author,
          //画布上的图片和文字,文字要控制字数
          // photo:res.data.imgUrl,
          // word:res.data.word
          views: res.data.Views,
        })
        wxparse.wxParse('dkcontent', 'html', that.data.dkcontent, that, 5)

        // 生成画布
        let promise1 = new Promise(function(resolve, reject) {
          wx.getImageInfo({
            src: res.data.imgUrl,
            success: function(res1) {
              // console.log(res1)
              resolve(res1);
            }
          })
        });
        let promise2 = new Promise(function(resolve, reject) {
          wx.getImageInfo({
            src: '../../images/qrcode.jpg',
            success: function(res1) {
              // console.log(res1)
              resolve(res1);
            }
          })
        });
        Promise.all([
          promise1, promise2
        ]).then(res1 => {
          // console.log(res1)
          const ctx = wx.createCanvasContext('shareImg')
          //主要就是计算好各个图文的位置
          // var unit = that.data.screenWidth / 375
          ctx.setFillStyle('white');
          ctx.fillRect(0, 0, 600, 880);
          ctx.drawImage(res1[0].path, 50, 200, 400, 400)
          ctx.drawImage('../../' + res1[1].path, 350, 610, 160, 160)
          // ctx.drawImage(imgurl, 50, 200, 400, 400)
          // ctx.drawImage(bgImgPath, 350, 610, 160, 160)

          ctx.setFontSize(28)
          ctx.setFillStyle('#6F6F6F')
          ctx.fillText('来自小程序 - 青少儿书画', 30, 660)

          ctx.setFontSize(30)
          ctx.setFillStyle('#111111')
          ctx.fillText('快来围观作品', 30, 710)

          ctx.setFontSize(22)
          ctx.fillText('长按扫码进入小程序查看', 30, 750)

          ctx.setFillStyle('#6F6F6F')
          ctx.fillText('Author:' + res.data.author, 545 / 2, 100)
          ctx.setTextAlign('center')
          ctx.setFontSize(24)
          ctx.setFillStyle('#111111')
          ctx.fillText(res.data.title, 545 / 2, 50)
          ctx.fillText(res.data.word, 545 / 2, 160)
          ctx.fillText('……', 60, 190)
          ctx.stroke()
          ctx.draw()
        })

      }
    })


  },

  // 同时获取留言即可
  // var that = this;
  // wx.getStorage({
  //   key: 'info',
  //   success: function (res) {
  //     //msgData还是空的
  //     var list = that.data.msgData;
  //     var a = list ? list : []
  //     var apple = res.data
  //     //将数据加入到msgData
  //     a = apple
  //     that.setData({
  //       msgData: a
  //     })
  //   }
  // })


  onShareAppMessage: function() {
    // console.log(this.data.id)
    return {
      title: '青少儿书画●内容',
      path: 'pages/detail/detail?id=' + this.data.id
    }
  },

  // 删除留言
  del(e) {
    var that = this
    var n = e.target.dataset.index;
    var list = that.data.msgData
    wx.showModal({
      title: '提示',
      content: '是否删除该条数据',
      success: function(res) {
        // console.log(res.confirm)
        if (res.confirm) {
          list.splice(n, 1);
          that.setData({
            msgData: list
          })
          wx.showToast({
            title: '删除成功',
          })
        }
      }
    })

  },
  // 添加留言
  add(e) {
    if (this.data.inputVal == '') {
      wx.showToast({
        title: '请留言',
      })
      return false;
    }
    var list = this.data.msgData;
    var a = list ? list : []
    a.push({
      msg: this.data.inputVal
    })
    wx.setStorage({
      key: 'info',
      data: a,
    })
    this.setData({
      msgData: a,
      inputVal: ''
    })
  },
  changeinputVal(e) {
    this.setData({
      inputVal: e.detail.value
    })
  },




  /**
   * 生成分享图
   */
  share: function() {
    var that = this
    //获取用户设备信息设备像素比
    // wx.getSystemInfo({
    //   success: res => {
    //     that.setData({
    //       pixelRatio: res.pixelRatio
    //     })
    //     console.log(that.data.pixelRatio)
    //   }
    // })
    // 本质上就是生成一个更大的图片,因为手机的屏幕设备的像素比现在一般都是超过2的。实际上我们只需要在使用wx.canvasToTempFilePath的时候,设置参数destWidth和destHeight(输出的宽度和高度)为width和height的2倍以上即可。
    wx.showLoading({
      title: '努力生成中...'
    })
    wx.canvasToTempFilePath({
      x: 0,
      y: 0,
      width: 545,
      height: 771,
      destWidth: 545 * 2,
      destHeight: 771 * 2,
      canvasId: 'shareImg',
      success: function(res) {
        // console.log(res.tempFilePath);
        that.setData({
          prurl: res.tempFilePath,
          hidden: false
        })
        wx.hideLoading()
      },
      fail: function(res) {
        console.log(res)
      }
    })
  },

  /**
   * 保存到相册
   */
  save: function() {
    var that = this
    //生产环境时 记得这里要加入获取相册授权的代码
    wx.saveImageToPhotosAlbum({
      filePath: that.data.prurl,
      success(res) {
        wx.showModal({
          content: '图片已保存到相册,赶紧晒一下吧~',
          showCancel: false,
          confirmText: '好哒',
          confirmColor: '#72B9C3',
          success: function(res) {
            if (res.confirm) {
              // console.log('用户点击确定');
              that.setData({
                hidden: true
              })
            }
          }
        })
      }
    })
  },

})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年10月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
小程序如何生成海报分享朋友圈
项目需求写完有一段时间了,但是还是想回过来总结一下,一是对项目的回顾优化等,二是对坑的地方做个记录,避免以后遇到类似的问题。
super.x
2019/07/02
1.5K0
【小程序】728- 小程序如何生成海报分享朋友圈
https://segmentfault.com/a/1190000019083548
pingan8787
2020/09/30
1.4K0
【小程序】728- 小程序如何生成海报分享朋友圈
小程序上传图片加水印
注意事项: 1.如果在画图完成后,有对应操作时,必须在draw的callback后执行,比如图片预览、改变画布大小等 ctx.draw(false, function() { console.log(‘后续操作’);
全栈程序员站长
2022/07/04
1.2K0
手把手教你撸一个小程序带太阳码的海报分享
我们都知道,微信小程序目前还不支持转发朋友圈,可能现在Android是支持了,iOS还不支持,但总的来说还不能支持普遍机型。这样假如我们需要推荐某个心仪的商品到朋友圈就没法分享出去,于是就可以使用生成海报的形式,让商品详情页的信息显示在一张图片上,保存到手机相册,然后发朋友圈,朋友可以长按识别海报上的小程序码直达该商品详情页面,从而达到如同直接分享商品详情页的效果。
悟空码字
2021/03/23
2.3K0
小程序中搜索文件,阅览pdf,分享文件链接,评论表情符号
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/84111389
hotqin888
2018/12/13
1K0
小程序中搜索文件,阅览pdf,分享文件链接,评论表情符号
小程序生成图片并保存
自己做过几个小程序生成图片并保存的功能,觉得做这个功能用到的还挺多的,记录一下。 总体可以分为: 前端处理:后端返回数据,前端自己将图片、文字等画到 canvas 上,然后转图片。 后端处理:后端直接返回图片,前端只做保存功能。 #前端处理 #绘制 Canvas 并保存 小程序有强大的 canvas 可以转成图片并保存,具体API看 文档 。 但是 canvas 的原生操作过于啰嗦,比如画一个字上去: const ctx = wx.createCanvasContext('myCanvas') ctx.s
九旬
2020/10/23
3K0
第九十期:一个小程序生成海报的问题
最近还是在做基于ts+taro的小程序开发,有个前端生成海报的需求。本来想着这个需求很简单,因为之前写过这个功能,基本的逻辑就是产品图片地址和小程序码图片地址下载到本地,然后通过createCanvasContext()这个方法拿到canvas的上下文,进行绘制即可。
terrence386
2022/07/15
5570
【微信小程序】基于百度大脑人体检测、人脸识别以及调用阿里垃圾分类识别小程序利用canvas完成人脸画图、分割手部部分图片算法
说明:人体出现在镜头里用红色框将人脸圈出来、用黄色框将手部圈出来,定时器触发后,通过百度返回的top+、left+、width+、height+将拍照的截图用canvas画出来,最后保存上传到阿里云垃圾分类识别检测
德宏大魔王
2023/08/08
5720
【微信小程序】基于百度大脑人体检测、人脸识别以及调用阿里垃圾分类识别小程序利用canvas完成人脸画图、分割手部部分图片算法
微信小程序实现canvas生成海报保存到本地
效果图 <view> <canvas class="canvas" style="width: {{canvas_width}}px;height:{{canvas_height}}px;
明知山
2020/09/03
1.9K3
开发小程序的一些小经验
图片在微信小程序中可以说是一个神奇的存在。在web开发中,我们会利用图片的自适应比如百分比而省去不少麻烦,因为高度会自适应。但是小程序中的图片都有一个初始大小,而且是固定的,无论你的图片多大多小,都是统一的320px*240px。虽然作为组件的图片支持平铺,剪切等呈现效果,但是容器大小都是固定的,所以每次使用image我们要想办法控制图片的大小。
小美娜娜
2019/04/04
9170
开发小程序的一些小经验
uniapp H5 画布自定义海报实现长按识别,分享,转发
前端使用uniapp制作H5自定义海报,本来以为挺简单的一常用功能画布,因为之前也在 H5 和小程序做过类似功能,所以直接上手干了,没想到还是遇到了一些坑,特此记录希望能够帮到大家。
IT工作者
2022/05/16
4K0
小程序10行代码实现微信头像挂红旗,国庆节个性化微信头像
至于如何创建小程序,我这里就不在细讲了,我也有写过创建小程序的文章,也有路过相关的学习视频,去翻下我历史文章找找就行。
编程小石头
2019/09/26
3.4K6
小程序10行代码实现微信头像挂红旗,国庆节个性化微信头像
【愚公系列】2022年08月 微信小程序项目篇-抽奖轮盘
互联网时代,越来越多的商家开始通过各种各样的线上营销活动来吸引客户,提高销量,比如抽奖活动、投票活动、拼团活动、秒杀活动等,其中抽奖活动广受商家与客户的喜爱,比较常见的便是幸运大转盘抽奖活动。
愚公搬代码
2022/09/23
9910
微信小程序之生成图片分享
通过社交软件分享的方式来进行营销小程序,是一个常用的运营途径。小程序本身支持直接将一个小程序的链接卡片分享至微信好友或微信群,然后别人就可以通过点击该卡片进入该小程序页面。但是小程序目前不支持直接分享到微信朋友圈,而对我们来说,微信朋友圈又是一个很重要的吸引别人关注的入口,所以,得想办法把这个资源利用起来。
一斤代码
2018/08/21
4.9K0
微信小程序之生成图片分享
微信小程序|抽奖大转盘实战
在抽奖的应用或小程序中,大多会采用一种常见的大转盘抽奖方式,这种方式能直观展现出这个抽奖活动的形式和内容,且能直接吸引人参与。那么这个功能是如何实现的呢?
算法与编程之美
2020/05/29
6.1K1
微信小程序|抽奖大转盘实战
小程序canvas生成海报图片压缩和失真问题解决
我这里绘制二维码使用的 wxapp-qrcode ,也可以使用weapp-qrcode,基本是一样的,今天主要讲解适配不同屏幕尺寸的canvas。
PHP开发工程师
2022/04/14
2.2K0
利用Phaser开发微信小游戏(排行榜小结)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
2.4K0
uniapp生成海报完整示例
uni.canvasToTempFilePath(object, component) 组件形式需要加指向component也就是this uni.createCanvasContext(canvasId, this)
2023/10/18
6780
uniapp生成海报完整示例
小程序给图片添加水印(时间,经纬度信息)
在移动互联网时代,小程序因其轻量、便捷的特性,逐渐成为用户日常生活中不可或缺的工具。无论是社交、购物,还是记录生活,小程序都提供了丰富的功能。然而,随着用户对数据安全和信息追溯需求的增加,如何在图片中添加关键信息(如时间、经纬度等)成为开发者需要解决的问题之一。尤其是在一些特定场景下,如户外打卡、旅行记录、证据留存等,为图片添加时间戳和地理位置信息不仅能增强数据的可信度,还能为用户提供更丰富的上下文信息。
fastmock
2025/07/22
950
小程序中数字验证码的实现
先说说为什么要折腾这个demo,之前经常有用户反馈,说是删除自己的记录时,能否给个强一点儿的提示,因为确认框弹出后,大家会习惯性的点击确认,内容可能根本没有看清楚,导致很多内容被误删除了。
连胜
2018/08/01
1.5K0
小程序中数字验证码的实现
推荐阅读
相关推荐
小程序如何生成海报分享朋友圈
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档