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
Im Vergleich zu anderen großen Datenbanken wie Or...
Konventionelle Lösung Verwenden Sie FileReader, u...
Inhaltsverzeichnis So stellen Sie den MySQL-Diens...
Wie finde ich langsame SQL-Anweisungen in MySQL? ...
Leerzeichenregeln in HTML In HTML werden mehrere ...
0. Was ist ein Tag? XML/HTML-CodeInhalt in die Zw...
Inhaltsverzeichnis 1. Deduplizierung einrichten 2...
Inhaltsverzeichnis Drei Schritte zum Betrieb der ...
Dieser Artikel veranschaulicht anhand von Beispie...
Installieren Sie die entpackte Version von Mysql ...
Da wir eine Website erstellen wollten, enthielt d...
Konfigurieren Sie zunächst die Projektartefakte K...
Inhaltsverzeichnis Ziehen Sie das Rocketmq-Image ...
Inhaltsverzeichnis Vorwort Vorbereitung Gehen! Te...
Das letzte Update von Alibaba Cloud Disk ist scho...