Maison  >  Article  >  Applet WeChat  >  Code pour générer des images dans le mini-programme WeChat

Code pour générer des images dans le mini-programme WeChat

不言
不言original
2018-09-08 17:32:325220parcourir

Le contenu de cet article concerne le code pour générer des images dans l'applet WeChat. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Ajouter un canevas

Tout d'abord, vous devez utiliser le composant 5ba626b379994d53f7acf72a64f9b697 pour effectuer des opérations de dessin dans le mini-programme. divisé en trois parties suivantes : une grande image d'arrière-plan, un texte dynamique ("titre nom d'utilisateur et autres informations") et une petite image de code de programme. Ensuite, nous mettons d'abord le 5ba626b379994d53f7acf72a64f9b697 suivant dans notre code wxml :

<!--wxml代码-->
<view style=&#39;width:100%;height:100%;&#39; bindlongpress=&#39;saveInviteCard&#39;>
  <canvas canvas-id="shareCanvas" style="width:{{windowWidth}}px;height:{{windowHeight}}px" ></canvas>
</view>

Introduire des fonctions tierces

const util = require(&#39;../../utils/util.js&#39;)
//util.js
var Promise = require(&#39;../components/bluebird.min.js&#39;)

module.exports = {
  promisify: api => {
    return (options, ...params) => {
      return new Promise((resolve, reject) => {
        const extras = {
          success: resolve,
          fail: reject
        }
        api({ ...options, ...extras }, ...params)
      })
    }
  }
}

bluebird.min.js tout le monde Vous pouvez télécharger depuis Baidu vous-même. Le code du fichier source est trop long, je ne le copierai donc pas ici.

//获取手机宽高 
wx.getSystemInfo({
    success: function (res) {
      wc.put(&#39;phoneInfo&#39;, res)
    }
  });

var windowHeight = phoneInfo.windowHeight, windowWidth = phoneInfo.windowWidth
self.setData({
   windowHeight: windowHeight,
   windowWidth: windowWidth
 })

//在这段代码中,我们通过使用wx.getImageInfo这个API来下载一个网络图片到本地(并可获取该图片的尺寸等其他信息),然后调用ctx.drawImage方法将图片绘制到画布上,填满画布。

const wxGetImageInfo = util.promisify(wx.getImageInfo)
//绘制二维码
Promise.all([
      //背景图
      wxGetImageInfo({
        src: &#39;https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1536213812443&di=753a0a49acfd390fba9fd7884daafa5c&imgtype=0&src=http%3A%2F%2Fi5.hexunimg.cn%2F2016-08-10%2F185422031.jpg&#39;
      }),
      //二维码
      wxGetImageInfo({
        src: &#39;https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1898297765,3486952215&fm=26&gp=0.jpg&#39;
      })
    ]).then(res => {
      console.log(res)
      if (res[0].errMsg == "getImageInfo:ok" && res[1].errMsg == "getImageInfo:ok"){
        const ctx = wx.createCanvasContext(&#39;shareCanvas&#39;)

        // 底图
        ctx.drawImage(res[0].path, 0, 0, windowWidth, windowHeight)

        //写入文字
        ctx.setTextAlign(&#39;center&#39;)    // 文字居中
        ctx.setFillStyle(&#39;#f3a721&#39;)  // 文字颜色:黑色
        ctx.setFontSize(22)         // 文字字号:22px
        ctx.fillText("作者:墜夢—Eric", windowWidth / 2, windowHeight / 2)

        // 小程序码
        const qrImgSize = 150
        ctx.drawImage(res[1].path, (windowWidth - qrImgSize) / 2, windowHeight / 1.8, qrImgSize, qrImgSize)

        ctx.stroke()
        ctx.draw()
      }else{
        wx.showToast({
          title: &#39;邀请卡绘制失败!&#39;,
          image:&#39;../../asset/images/warning.png&#39;
        })
      }
 })

De cette façon, notre image de partage est presque générée.

Appuyez longuement sur l'image pour l'enregistrer dans l'album système

Pour l'enregistrer dans l'album système de l'utilisateur, pour réaliser cette fonction, nous nous appuyons principalement sur les deux API wx.canvasToTempFilePath et wx.saveImageToPhotosAlbum.

Le processus principal consiste à utiliser d'abord wx.canvasToTempFilePath pour générer l'image dessinée sur 5ba626b379994d53f7acf72a64f9b697 dans un fichier temporaire, puis à utiliser wx.saveImageToPhotosAlbum pour l'enregistrer dans l'album système.

  //保存邀请卡
  saveInviteCard:function(){
    console.log(&#39;保存图片&#39;)
    const wxCanvasToTempFilePath = util.promisify(wx.canvasToTempFilePath)
    const wxSaveImageToPhotosAlbum = util.promisify(wx.saveImageToPhotosAlbum)

    wxCanvasToTempFilePath({
      canvasId: &#39;shareCanvas&#39;
    }, this).then(res => {
      return wxSaveImageToPhotosAlbum({
        filePath: res.tempFilePath
      })
    }).then(res => {
      wx.showToast({
        title: &#39;已保存到相册&#39;
      })
    })
  }

Recommandations associées :

Exemple de dessin de toile de code QR de l'applet WeChat Explication détaillée

Toile d'applet WeChat Détail de base explication

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn