


Eingehende Analyse der in WeChat-Applet-Seiten implementierten Speicherung von Bildern (mit Code)
Im vorherigen Artikel „Eine kurze Analyse der Interaktion zwischen WeChat-Miniprogrammen und dem Web (Code-Sharing)“ werde ich Ihnen ein Verständnis für die Interaktion zwischen WeChat-Miniprogrammen und dem Web vermitteln. Der folgende Artikel vermittelt Ihnen ein Verständnis dafür, wie Sie Bilder auf der WeChat-Applet-Seite speichern. Ich hoffe, dass er Ihnen weiterhilft.
Hintergrund
Speichern Sie das Bild in der Webansicht
des Miniprogramms. Da das js-sdk
von WeChat die Methode saveImageToPhotosAlbum
nicht bereitstelltwebview
里保存图片。因为微信的js-sdk
没有提供saveImageToPhotosAlbum
方法
更多web
和小程序的交互,请看这里
解决思路
先加载微信js-sdk
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
分三步
1、html
端把图片转为base64
,然后通过postmessage
传递给小程序
let img = new Image(); img.src = "xxxx"; //这里是图片的src img.crossOrigin = "anonymous"; //The opeartaion is insecure . 其它跨域的问题 自行代理解决 img.onload = function () { let canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; let ctx = canvas.getContext("2d"); ctx.drawImage(this, 0, 0); let imgBase64Data = canvas.toDataURL("image/jpeg", 1); //这里就拿到了base64 wx.miniProgram.postMessage({ data: { imgData: imgBase64Data, // 刚才拿到的base64 数据 }, }); };
2、小程序监听postmessage
拿到图片base64
数据。
// wxml < web - view src = "http://www.chuchur.com/save-image" bindmessage = "getMessage" > < /web-view> // js Page({ data: { imageData: null } getMessage(e) { this.setData({ imageData: e.detail.data[0].imgData }) } })
3. 保存图片到相册(在小程序里)
因为拿到是base64
图片数据,首先要把它存为图片文件。
wx.getFileSystemManager().writeFile({ filePath: wx.env.USER_DATA_PATH + "/qrcode.png", //这里先把文件写到临时目录里. data: this.data.imageData.slice(22), // 注意这里 encoding: "base64", success: (res) => { console.log("success"); }, fail: (error) => { console.log(error); }, });
getFileSystemManager的writeFile写入的base64是不包含图片的头字节的。所以要干掉data:image/jpeg;base64,等字符
有了文件路径就可以保存到相册了
wx.saveImageToPhotosAlbum({ filePath: wx.env.USER_DATA_PATH + "/qrcode.png", //这是把临时文件 保存到 相册, 收工 success: (res) => { wx.showToast({ title: "保存成功!", }); }, fail: (error) => { console.log(error); }, });
没有接收到?不是实时触发?
文档发现虽然h5
中的postMessage
会马上提交信息,但是小程序并不会马上受理,在小程序webview
上的监听函数,只会在特定时机触发并收到消息:也就是postMessage
所有的消息都只能等得分享或webview
的生命周期结束才会被触发。他是一个消息队列:
getMessage: function(e) { if (e.type === 'message' && e.detail && e.detail.data && e.detail.data.length > 0) { e.detail.data.forEach(function(dataItem) { if (dataItem.type === 'qbreport' && dataItem.key) { // todo: yourFn(dataItem.key) } }) } }
所以,我们在执行保存的时候可以立马触发它的返回事件。
function() { // 此处省略 wx.miniProgram.postMessage({ data: { xxx: 'aaa' } }) wx.miniProgram.navigateBack({ delta: 1 }) //注意这里. }
完整的代码如下:
html
web
und Miniprogrammen finden Sie hier
Um es zu lösen. Idee: Laden Sie zuerst WeChat
js-sdk
. webchat webview save image <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <script> function saveImage() { let img = new Image() img.src = 'xxxx' //这里是图片的src img.crossOrigin = 'anonymous' //The opeartaion is insecure , 其他跨域问题自行代理解决. img.onload = function() { let canvas = document.createElement('canvas') canvas.width = img.width canvas.height = img.height let ctx = canvas.getContext('2d') ctx.drawImage(this, 0, 0) let imgBase64Data = canvas.toDataURL('image/jpeg', 1) //这里就拿到了base64 wx.miniProgram.postMessage({ data: { imgData: imgBase64Data // 刚才拿到的base64 数据 } }) wx.miniProgram.navigateBack({ delta: 1 }) //注意这里. } } </script>
postmessage
an das Applet. Das Applet hört auf postmessage
und erhält das Bild base64</. Code> Daten. <strong></strong><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>// wxml
<
web - view src = "http://www.chuchur.com/save-image"
bindmessage = "getMessage" > < /web-view>
// js
Page({
getMessage(e) {
let img = e.detail.data[0].imgData
wx.getFileSystemManager().writeFile({
filePath: wx.env.USER_DATA_PATH + &#39;/qrcode.jpeg&#39;, //这里先把文件写到临时目录里.
data: img.slice(22), //注意这里
encoding: &#39;base64&#39;,
success: res => {
console.log(&#39;success&#39;)
wx.saveImageToPhotosAlbum({
filePath: wx.env.USER_DATA_PATH + &#39;/qrcode.jpeg&#39;, //这是把临时文件 保存到 相册, 收工
success: res => {
wx.showToast({
title: &#39;保存成功!&#39;
})
},
fail: error => {
console.log(error)
}
})
},
fail: error => {
console.log(error)
}
})
}
})</pre><div class="contentsignin">Nach dem Login kopieren</div></div></p><p>3. Speichern Sie das Bild im Album (im Miniprogramm) <a href="https://www.php.cn/course/list/70.html" target="_blank"></a><br/>Da Sie die Bilddaten <code>base64
erhalten, müssen Sie diese zunächst als Bilddatei speichern. wx.showLoading({ title: "正在下载图片... ", mask: !1 }) wx.downloadFile({ url: '填写一个远程的图片链接', success: function(t) { wx.showLoading({ title: "正在保存图片", mask: !1 }) wx.saveImageToPhotosAlbum({ filePath: t.tempFilePath, success: function() { wx.showModal({ title: "自定义提示信息", content: "保存成功", showCancel: !1 }); }, fail: function(t) { wx.showModal({ title: "图片保存失败", content: t.errMsg, showCancel: !1 }); }, complete: function(t) { wx.hideLoading(); } }); }, fail: function(t) { wx.showModal({ title: "图片下载失败", content: t.errMsg, showCancel: !1 }); }, complete: function(t) { wx.hideLoading(); } }))
postMessage
in h5
die Informationen zwar sofort übermittelt, das Miniprogramm sie jedoch nicht sofort im Miniprogramm webview
akzeptiert > Die Abhörfunktion wird nur zu bestimmten Zeiten ausgelöst und empfängt Nachrichten: Das heißt, alle Nachrichten in postMessage
können erst ausgelöst werden, nachdem der Lebenszyklus der Freigabe oder webview
endet. . Es handelt sich um eine Nachrichtenwarteschlange: 🎜rrreee🎜🎜Also🎜, wir können ihr Rückgabeereignis sofort auslösen, wenn wir den Speichervorgang ausführen. 🎜rrreee🎜 Der vollständige Code lautet wie folgt: 🎜🎜 HTML
Nebencode: 🎜rrreee🎜small Programm Nebencode: 🎜rrreee🎜oTher Related🎜🎜🎜Save Remote Pictures🎜🎜rrreee🎜Recompt: 🎜 SVG-Video-Tutorial🎜🎜🎜Das obige ist der detaillierte Inhalt vonEingehende Analyse der in WeChat-Applet-Seiten implementierten Speicherung von Bildern (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Anleitung zum Tabellenrahmen in HTML. Hier besprechen wir verschiedene Möglichkeiten zum Definieren von Tabellenrändern anhand von Beispielen für den Tabellenrand in HTML.

Dies ist eine Anleitung für verschachtelte Tabellen in HTML. Hier diskutieren wir anhand der entsprechenden Beispiele, wie man eine Tabelle innerhalb der Tabelle erstellt.

Anleitung zum HTML-Rand links. Hier besprechen wir einen kurzen Überblick über HTML margin-left und seine Beispiele sowie seine Code-Implementierung.

Leitfaden zum HTML-Tabellenlayout. Hier besprechen wir die Werte des HTML-Tabellenlayouts zusammen mit den Beispielen und Ausgaben im Detail.

Leitfaden für HTML-Eingabeplatzhalter. Hier besprechen wir die Beispiele für HTML-Eingabeplatzhalter zusammen mit den Codes und Ausgaben.

Anleitung zum Verschieben von Text in HTML. Hier besprechen wir eine Einführung, wie Marquee-Tags funktionieren, mit Syntax und Beispielen für die Implementierung.

Leitfaden zur HTML-geordneten Liste. Hier besprechen wir auch die Einführung von HTML-geordneten Listen und Typen sowie deren Beispiele

Anleitung zum HTML-OnClick-Button. Hier diskutieren wir deren Einführung, Funktionsweise, Beispiele und Onclick-Events in verschiedenen Veranstaltungen.
