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

InnoDB-Typ MySql stellt Tabellenstruktur und Daten wieder her

Voraussetzung: Speichern Sie die .frm- und .ibd-D...

js implementiert dynamisch Operationen zum Hinzufügen und Löschen von Tabellen

In diesem Artikelbeispiel wird der spezifische Co...

Beispiele für Vorschaufunktionen für verschiedene Dateitypen in vue3

Inhaltsverzeichnis Vorwort 1. Vorschau der Office...

So installieren Sie eine PHP7 + Nginx-Umgebung unter CentOS6.6

Dieser Artikel beschreibt, wie man eine PHP7 + Ng...

CSS Polarkoordinaten Beispielcode

Vorwort Das Projekt stellt Anforderungen an Karte...

Lösung für das zu langsame Herunterladen des Docker-Images

Der Download des Docker-Images hängt oder ist zu ...

HTML validieren HTML-Validierung

„HTML-Validierung“ bezieht sich auf die HTML-Valid...

So legen Sie den Standardwert für den Datums-/Uhrzeittyp in MySQL fest

Beim Ändern des Standarddatums-/Uhrzeitwerts über...

Die Frontend-Entwicklung muss jeden Tag lernen, HTML-Tags zu verstehen (1)

2.1 Semantisierung sorgt dafür, dass Ihre Webseit...

Mehrere Möglichkeiten zum Ändern der SELECT-Optionen in einer HTML-Dropdown-Box

Nachdem das Formular übermittelt wurde, wird die z...