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
Parameter im Zusammenhang mit dem langsamen Abfra...
Es gibt eine andere Baumstruktur Javascript-Objek...
Kapseln Sie eine Navigationsleistenkomponente in ...
01. Befehlsübersicht Der Befehl tr kann Zeichen a...
1. Einleitung Vor einiger Zeit gab es eine Reihe ...
In diesem Artikelbeispiel wird der spezifische Co...
Guter HTML-Code ist die Grundlage einer schönen W...
Verschlüsselung und Entschlüsselung sind wichtige...
Responsive Layoutsysteme sind in den heute gängig...
PHP-bezogene Pfade in der Ubuntu-Umgebung PHP-Pfa...
So lösen Sie das Problem, dass nach dem Neustart ...
Inhaltsverzeichnis 1: Bereiten Sie das https-Zert...
<br />Struktur und Hierarchie reduzieren die...
Inhaltsverzeichnis JS liest Datei FileReader doku...
Manchmal müssen wir steuern, ob HTML-Elemente auf ...