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

不言
Libérer: 2018-09-08 17:32:32
original
5230 Les gens l'ont consulté

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 <canvas> 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 <canvas> 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>
Copier après la connexion

Introduire des fonctions tierces

const util = require(&#39;../../utils/util.js&#39;)
Copier après la connexion
//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)
      })
    }
  }
}
Copier après la connexion

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;
        })
      }
 })
Copier après la connexion

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 <canvas> 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;
      })
    })
  }
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal