In diesem Artikel wird der spezifische Code von Vue, der Canvas verwendet, um das Hochladen von Bildkomprimierungen zu Ihrer Information zu erreichen, geteilt. Der spezifische Inhalt ist wie folgt Szenario: wie Benutzeravatar usw. Beim Hochladen großformatiger Bilder spart die Komprimierung im Frontend nicht nur Datenverkehr, sondern verbessert auch das Benutzererlebnis erheblich. Zwei Aspekte: 1. Da die hochgeladene Bildgröße relativ klein ist, ist die Upload-Geschwindigkeit höher und die Interaktion reibungsloser. Gleichzeitig wird das Risiko eines Upload-Fehlers aufgrund von Netzwerkanomalien erheblich reduziert. Beispiel: Haupttechnologie: Verwenden Sie die drawImage()- Methode von Canvas . (Anhang: canvas.toDataURL() oder canvas.toBlob()) ctx.drawImage(Bild, dx, dy); ctx.drawImage(Bild, dx, dy, dBreite, dHöhe); ctx.drawImage(Bild, sx, sy, sBreite, sHöhe, dx, dy, dBreite, dHöhe); Beispiel: //html <input id="Datei" Typ="Datei"> // JS var eleFile = document.querySelector('#Datei'); //Einige Elemente und Objekte, die zum Komprimieren von Bildern benötigt werden var reader = new FileReader(), img = new Image(); //Ausgewähltes Dateiobjekt var file = null; //Skalierung der für das Bild erforderlichen Leinwand var Leinwand = Dokument.createElement('Leinwand'); var Kontext = Canvas.getContext('2d'); // Nachdem das Base64-Adressbild geladen wurde, img.onload = function () { //Originalgröße des Bildes var originWidth = this.width; var originHeight = diese.Höhe; // Maximale Größenbeschränkung var maxWidth = 400, maxHeight = 400; // Zielgröße var targetWidth = originWidth, targetHeight = originHeight; // Die Bildgröße überschreitet das Limit von 400x400 if (originWidth > maxWidth || originHeight > maxHeight) { wenn (Ursprungsbreite / Ursprungshöhe > max.Breite / max.Höhe) { // Breiter, begrenze die Größe entsprechend der Breite targetWidth = maxWidth; Zielhöhe = Math.round(maximale Breite * (Ursprungshöhe / Ursprungsbreite)); } anders { Zielhöhe = max. Höhe; Zielbreite = Math.round(max.Höhe * (Ursprungsbreite / Ursprungshöhe)); } } // Canvas skaliert das Bild canvas.width = targetWidth; canvas.height = Zielhöhe; //Leinwand löschen context.clearRect(0, 0, targetWidth, targetHeight); // Bildkomprimierung context.drawImage(img, 0, 0, targetWidth, targetHeight); // Canvas in Blob umwandeln und hochladen canvas.toBlob(function (blob) { // Ajax-Upload von Bildern var xhr = new XMLHttpRequest(); // Datei-Upload erfolgreich xhr.onreadystatechange = function() { wenn (xhr.status == 200) { // xhr.responseText sind die zurückgegebenen Daten} }; // Starten Sie den Upload xhr.open("POST", 'upload.php', true); xhr.send(blob); }, Dateityp || 'image/png'); }; //Konvertiere die Datei in Base64, um die Originalgröße des Bildes zu erhalten reader.onload = function(e) { img.src = e.Ziel.Ergebnis; }; eleFile.addEventListener('ändern', Funktion (Ereignis) { Datei = Ereignis.Ziel.Dateien[0]; // Die ausgewählte Datei ist ein Bild if (file.type.indexOf("image") == 0) { reader.readAsDataURL(Datei); } }); Beachten: Das Bild wird auf der mobilen Seite verzerrt. Sie müssen die Leinwand entsprechend dem DPR des Geräts vergrößern und dann CSS verwenden, um die Wiederherstellung zu erzwingen. // Gerät-DPR abrufen getPixelRatio: Funktion (Kontext) { let backingStore = context.backingStorePixelRatio || Kontext.webkitBackingStorePixelRatio || Kontext.mozBackingStorePixelRatio || Kontext.msBackingStorePixelRatio || Kontext.oBackingStorePixelRatio || Kontext.backingStorePixelRatio || 1; Rückgabewert (window.devicePixelRatio || 1) / backingStore; } // so etwas wie das hier const ctx = this.canvas.getContext("2d"); const dpr = this.getPixelRatio(ctx); this.$refs.postImg.crossOrigin = "Anonym"; var alteWidth = this.canvas.width; var alteHeight = this.canvas.height; this.canvas.style.width = alteBreite + 'px'; this.canvas.style.height = alteHöhe + 'px'; this.canvas.width = alteBreite * dpr; this.canvas.height = alteHöhe * dpr; ctx.scale(dpr, dpr); //Normale Vorgänge ausführen ctx.drawImage(this.$refs.cropImg, 0, 0, 250, 400); Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Beispiel für eine MySQL-DML-Sprachoperation
>>: Tutorial-Diagramm zur VMware-Installation des Ubuntu 20.04-Betriebssystems
Docker-Installation Installieren von Abhängigkeit...
1. Quellenliste sichern Die Standardquelle von Ub...
In diesem Artikel wird hauptsächlich erläutert, w...
Optimierungsideen Es gibt zwei Hauptoptimierungsr...
Ich habe vor Kurzem angefangen, mich mit Datenban...
Vor allem aus zwei Gründen: 1. Hervorhebung/Zeile...
#!/bin/bash #SVN herunterladen yum -y installiere...
Finden Sie das Problem Heute werde ich den Tomcat...
Über Docker Swarm Docker Swarm besteht aus zwei T...
Lösung für das Problem, dass in Linux kein Entpac...
Ich habe kürzlich einige CSS-bezogene Wissenspunk...
1. Einleitung Lassen Sie Ihre Website immer noch ...
Vorwort: Im vorherigen Artikel wurden mehrere all...
Inhaltsverzeichnis Entwicklungsumgebung Game-Engi...
Kürzlich habe ich vom Vue-Projekt erfahren und bi...