js realisiert das Verpacken mehrerer Bilder in Zip

js realisiert das Verpacken mehrerer Bilder in Zip

1. Dateien importieren

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jszip/3.6.0/jszip.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>

2. HTML-Seite

<button onclick="packageImages()">Zip herunterladen</button><span id="status"></span>

3. Hauptcode

Funktion PaketBilder() {
    $('#status').text('Wird verarbeitet...')

    var imgsSrc = []

    // https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg
    // upload/2022/web/u=2151136234,3513236673&fm=26&gp=0.jpg
    für (var i = 0; i < 1; i++) {
        imgsSrc.push('upload/2022/web/O1CN01npzdZ52Cf3A4cx8JG_!!0-item_pic.jpg_240x240.jpg')
    }
    var imgBase64 = [] //Base64-Bild var imageSuffix = [] //Bildsuffix var zip = new JSZip()
    zip.file('readme.txt', 'Falldetails\n')
    var img = zip.folder('Bilder')

    für (var i = 0; i < imgsSrc.length; i++) {
        var Suffix = imgsSrc[i].substring(imgsSrc[i].lastIndexOf('.'))
        imageSuffix.push(Suffix)

        getBase64(imgsSrc[i]).dann(
            Funktion (Base64) {
                Konsole.log (base64)
                imgBase64.push(base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, ""))
                // Wenn alle Bilder in Base64 konvertiert sind, führen Sie eine Bildkomprimierung durch, wenn (imgsSrc.length == imgBase64.length) {
                    für (var i = 0; i < imgsSrc.length; i++) {
                        // Dateiname data img.file(i + imageSuffix[i], imgBase64[i], {
                            base64: wahr,
                        })
                    }
                    zip.generateAsync({
                        Typ: "Blob"
                    }).dann(Funktion (Inhalt) {
                        console.log(1)
                        // siehe FileSaver.js
                        speichernUnter(Inhalt, 'bilder.zip')
                        $('#status').text('Verarbeitung abgeschlossen...')
                    })
                }
            },
            Funktion (Fehler) {
                console.log(err) //Ausnahmeinformationen drucken}
        )
    }
}

// Übergeben Sie den Bildpfad und geben Sie base64 zurück
Funktion getBase64(img) {
    Funktion getBase64Image(img, Breite, Höhe) {
        //Wenn Sie Breite und Höhe aufrufen, übergeben Sie bestimmte Pixelwerte, um die Größe zu steuern. Wenn nicht übergeben, wird die Standardbildgröße verwendet var canvas = document.createElement('canvas')
        canvas.width = Breite? Breite : img.width
        canvas.height = Höhe? Höhe: Bildhöhe

        var ctx = canvas.getContext('2d')
        ctx.drawImage(img, 0, 0, Leinwandbreite, Leinwandhöhe)
        var dataURL = canvas.toDataURL()
        Daten-URL zurückgeben
    }
    var image = neues Image()
    image.crossOrigin = "Anonym"
    bild.src = img
    var aufgeschoben = $.Aufgeschoben()
    wenn (img) {
        bild.onload = Funktion () {
            deferred.resolve(getBase64Image(image)) // übergebe base64 an done für die Upload-Verarbeitung}
        return deferred.promise() //Das Problem besteht darin, sessionStorage['imgTest'] zurückzugeben, nachdem onload abgeschlossen ist
    }
}

4. Optimieren Sie den Prozess der Konvertierung von Bildern in Base64 und verbessern Sie die Zip-Paketgeschwindigkeit

Funktion PaketBilder() {
    $('#status').text('Wird verarbeitet...')

    var imgsSrc = []

    // https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg
    // upload/2022/web/u=2151136234,3513236673&fm=26&gp=0.jpg
    für (var i = 0; i < 1; i++) {
        imgsSrc.push('upload/2022/web/u=2496571732,442429806&fm=26&gp=0.jpg')
    }
    var imgBase64 = [] //Base64-Bild var imageSuffix = [] //Bildsuffix var zip = new JSZip()
    zip.file('readme.txt', 'Falldetails\n')
    var img = zip.folder('Bilder')

    für (var i = 0; i < imgsSrc.length; i++) {
        var Suffix = imgsSrc[i].substring(imgsSrc[i].lastIndexOf('.'))
        imageSuffix.push(Suffix)

        getBase64(imgsSrc[i], Funktion (base64) {
            imgBase64.push(base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, ""))
            wenn (imgsSrc.length == imgBase64.length) {
                für (var i = 0; i < imgsSrc.length; i++) {
                    // Dateiname data img.file(i + imageSuffix[i], imgBase64[i], {
                        base64: wahr,
                    })
                }
                zip.generateAsync({
                    Typ: "Blob"
                }).dann(Funktion (Inhalt) {
                    console.log(1)
                    // siehe FileSaver.js
                    speichernUnter(Inhalt, 'bilder.zip')
                    $('#status').text('Verarbeitung abgeschlossen...')
                })
            }
        })
    }
}
Funktion getBase64(img, Rückruf) {
    holen(img).dann(
        res => res.blob())
        .then(res => {
            let fr = neuer FileReader(); //https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
            fr.onload = Funktion (e) {
                Rückruf(e.Ziel.Ergebnis)
            };
            fr.onerror = Funktion () {
                console.log('Lesefehler!')
            };
            fr.readAsDataURL(res); //Wenn es sich um eine Textkonvertierung handelt, kann der zweite Parameter die Kodierung verwenden})
}

5. Optimieren Sie erneut und konvertieren Sie das Bild über Axios in Base64

Funktion PaketBilder() {
    $('#status').text('Wird verarbeitet...')

    var imgsSrc = []

    // https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg
    // upload/2022/web/u=2151136234,3513236673&fm=26&gp=0.jpg
    für (var i = 0; i < 100; i++) {
        imgsSrc.push('upload/2022/web/u=2496571732,442429806&fm=26&gp=0.jpg')
    }

    BatchDownload-Handle (imgsSrc)
}



getFile = (URL) => {
    returniere neues Promise((lösen, ablehnen) => {
        axios({
            Methode: 'get',
            URL (URL = URL = URL),
            Antworttyp: "Array-Puffer"
        }).dann(Daten => {
            auflösen(Daten.Daten)
        }).fangen(Fehler => {
            ablehnen(Fehler.toString())
        })
    })
};

// Batch-Download handleBatchDownload = async (selectImgList) => {
    const data = selectImgList;
    const zip = neues JSZip()
    const verspricht = []
    warte auf data.forEach((item, idx) => {
        // konsole.log(Element, idx)
        const promise = this.getFile(item).then(async (data) => { // Lade die Datei herunter und speichere sie als ArrayBuffer-Objekt const arr_name = item.split("/");
            let file_name = arr_name[arr_name.length - 1] // Dateinamen abrufen // if (file_name.indexOf('.png') == -1) {
            // Dateiname = Dateiname + '.png'
            // }
            warte auf zip.file(idx + '.png', data, {
                binär: wahr
            }) // Dateien einzeln hinzufügen })
        Versprechen.Push(Versprechen)
    })
    Versprechen.alle(Versprechen).dann(() => {
        zip.generateAsync({
            Typ: "Blob"
        }).then(content => { // Binärstream generieren saveAs(content, "photo.zip") // Dateispeicher verwenden, um die Datei zu speichern $('#status').text('Verarbeitung abgeschlossen…')
        })
    })

};

Oben finden Sie Einzelheiten dazu, wie Sie mit JS mehrere Bilder in eine Zip-Datei packen. Weitere Informationen zum Packen von JS-Bildern in eine Zip-Datei finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung zum Anpassen des Verpackungspfads von CSS, JS und Bildern in vue-cli3.0
  • Release BlueShow v1.0 Bildbrowser (ähnlich wie Lightbox) blueshow.js Paket herunterladen
  • Verwendung und Unterschied von Js-Modulverpackungsexporten erfordern Import
  • vue.config.js Verpackungsoptimierungskonfiguration
  • Bringen Sie Ihnen Schritt für Schritt bei, wie Sie video.js kompilieren und verpacken
  • nuxt.js fügt Umgebungsvariablen hinzu, um die Vorgänge in der Projektverpackungsumgebung zu unterscheiden
  • vue löst das Problem des Verpackungsfehlers uglifyjs-webpack-plugin
  • Zusammenfassung der Methoden zum Komprimieren des Volumens von Vue.js nach dem Verpacken (Vue.js ist nach dem Verpacken zu groß)
  • Lösen Sie das Problem, dass die Datei vendor.js nach der Vue-Verpackung zu groß ist

<<:  So ändern Sie das Kennwort von mysql5.7.20 unter Linux CentOS 7.4

>>:  Detaillierte Erläuterung zur Verwendung von Docker zum schnellen Bereitstellen der ELK-Umgebung (neueste Version 5.5.1)

Artikel empfehlen

Kapseln Sie die Navigationsleistenkomponente mit Vue

Vorwort: Die vollständige Kapselung eines Funktio...

Ausführliche Erläuterung der HTML-Grundlagen (Teil 1)

1. Das WEB verstehen Webseiten bestehen hauptsäch...

Welche Schleife ist in JavaScript die schnellste?

Wenn wir wissen, welche For-Schleife oder welcher...

Praktisches Beispiel einer virtuellen Vue-Liste

Inhaltsverzeichnis Vorwort Design erreichen Zusam...

Einführung in geplante Aufgaben im Linux-System

Inhaltsverzeichnis 1. Planaufgaben anpassen 2. Ze...

Installieren Sie Mininet aus dem Quellcode auf Ubuntu 16.04

Mininet Mininet ist eine leichtgewichtige, softwa...

Einführung in Who-Befehlsbeispiele in Linux

Über wen Zeigt die am System angemeldeten Benutze...

Webdesign-Erfahrung: Effizientes Schreiben von Webcode

Ursprünglich sollte dieses siebte Kapitel eine aus...

Tutorial zur Installation von MySQL 5.6 mit RPM in CentOS

Alle vorherigen Projekte wurden in der Windows-Sy...

Auch Webdesigner müssen Web-Coding lernen

Oftmals wird nach der Fertigstellung eines Webdes...

Detaillierte Analyse der MySQL-Optimierung von like und = Leistung

Einführung Die meisten Leute, die schon einmal Da...