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.
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='width:100%;height:100%;' bindlongpress='saveInviteCard'> <canvas canvas-id="shareCanvas" style="width:{{windowWidth}}px;height:{{windowHeight}}px" ></canvas> </view>
Introduire des fonctions tierces
const util = require('../../utils/util.js')
//util.js var Promise = require('../components/bluebird.min.js') 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('phoneInfo', 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: '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' }), //二维码 wxGetImageInfo({ src: 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1898297765,3486952215&fm=26&gp=0.jpg' }) ]).then(res => { console.log(res) if (res[0].errMsg == "getImageInfo:ok" && res[1].errMsg == "getImageInfo:ok"){ const ctx = wx.createCanvasContext('shareCanvas') // 底图 ctx.drawImage(res[0].path, 0, 0, windowWidth, windowHeight) //写入文字 ctx.setTextAlign('center') // 文字居中 ctx.setFillStyle('#f3a721') // 文字颜色:黑色 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: '邀请卡绘制失败!', image:'../../asset/images/warning.png' }) } })
De cette façon, notre image de partage est presque générée.
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('保存图片') const wxCanvasToTempFilePath = util.promisify(wx.canvasToTempFilePath) const wxSaveImageToPhotosAlbum = util.promisify(wx.saveImageToPhotosAlbum) wxCanvasToTempFilePath({ canvasId: 'shareCanvas' }, this).then(res => { return wxSaveImageToPhotosAlbum({ filePath: res.tempFilePath }) }).then(res => { wx.showToast({ title: '已保存到相册' }) }) }
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!