Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Golang zum schrittweisen Laden und Komprimieren von Bildern

So verwenden Sie Golang zum schrittweisen Laden und Komprimieren von Bildern

王林
王林Original
2023-08-18 12:46:581443Durchsuche

So verwenden Sie Golang zum schrittweisen Laden und Komprimieren von Bildern

So verwenden Sie Golang zum schrittweisen Laden und Komprimieren von Bildern

1 Einführung
Heutzutage ist die Verwendung von Bildern im Internet weit verbreitet. Allerdings treten häufig auch Probleme wie das langsame Laden großer Bilder und die fehlende progressive Anzeige auf, die das Benutzererlebnis beeinträchtigen. In diesem Artikel erfahren Sie, wie Sie mit Golang Bilder schrittweise laden und komprimieren, um die Ladegeschwindigkeit und das Benutzererlebnis zu verbessern.

2. Progressives Laden
Das sogenannte progressive Laden bedeutet, dass vor dem vollständigen Laden des Bildes nach und nach ein kleiner Teil seiner Qualität angezeigt werden kann.

In Golang habe ich die Drittanbieter-Bibliothek „github.com/chai2010/webp“ verwendet, um eine progressive Lade- und Komprimierungsverarbeitung durchzuführen. Als Nächstes werde ich Sie Schritt für Schritt durch den gesamten Prozess führen.

3. Abhängige Bibliotheken installieren
Öffnen Sie zunächst das Terminal und führen Sie den folgenden Befehl aus, um die „webp“-Bibliothek zu installieren:

go get -u github.com/chai2010/webp

4. Beispielcode für progressives Laden: Bilder komprimieren. Verarbeitung:

package main

import (
    "fmt"
    "github.com/chai2010/webp"
    "image/jpeg"
    "log"
    "os"
)

func main() {
    file, err := os.Open("path/to/image.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    img, err := jpeg.Decode(file)
    if err != nil {
        log.Fatal(err)
    }

    dest, err := os.Create("path/to/progressive_image.webp")
    if err != nil {
        log.Fatal(err)
    }
    defer dest.Close()

    options := webp.Options{
        Lossless:        false,
        Quality:         80,
        Method:          6,
        SnsStrength:     50,
        FilterSharpness: 0,
    }

    err = webp.Encode(dest, img, &options)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Progressive image generated successfully!")
}

Der obige Code öffnet zunächst ein Bild. Tritt beim Ladevorgang ein Fehler auf, wird eine Fehlermeldung ausgegeben. Verwenden Sie dann die Funktion jpeg.Decode, um das Bild in eine speicherinterne Bildstruktur zu dekodieren. Als nächstes wird eine Zieldatei erstellt und die Struktur webp.Options wird verwendet, um die Parameter des progressiven Ladens festzulegen, z. B. ob Komprimierung, Qualität, Methode, SNS-Stärke usw. verloren gehen sollen. Abschließend wird die Funktion webp.Encode aufgerufen, um das Bild in das fortlaufend geladene Webp-Format zu kodieren und in die Zieldatei auszugeben.

5. Komprimierungsverarbeitung

Auf der Grundlage des progressiven Ladens müssen wir auch Bilder komprimieren, um ihre Dateigröße zu reduzieren und die Ladegeschwindigkeit und das Benutzererlebnis zu verbessern.

Der folgende Beispielcode zeigt, wie man Golang zum Komprimieren von Bildern verwendet:

package main

import (
    "bytes"
    "fmt"
    "github.com/chai2010/webp"
    "image"
    "image/jpeg"
    "log"
    "os"
)

func main() {
    file, err := os.Open("path/to/image.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    img, err := jpeg.Decode(file)
    if err != nil {
        log.Fatal(err)
    }

    dest, err := os.Create("path/to/compressed_image.webp")
    if err != nil {
        log.Fatal(err)
    }
    defer dest.Close()

    options := webp.Options{
        Lossless:        false,
        Quality:         80,
        Method:          6,
        SnsStrength:     50,
        FilterSharpness: 0,
    }

    buff := new(bytes.Buffer)
    err = webp.Encode(buff, img, &options)
    if err != nil {
        log.Fatal(err)
    }

    err = webp.Write(dest, buff.Bytes())
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Compressed image generated successfully!")
}

Der obige Code ist im Grunde derselbe wie der progressive Ladecode. Der einzige Unterschied besteht darin, dass die komprimierten Bilddaten schließlich über das WebP in die Zieldatei geschrieben werden .Schreibfunktion.

Durch die obigen Codebeispiele haben wir gelernt, wie man mit Golang Bilder schrittweise lädt und komprimiert, um die Ladegeschwindigkeit und das Benutzererlebnis zu verbessern. Ich hoffe, dieser Artikel wird Ihnen hilfreich sein. Das Erlernen von Golang bringt viele Herausforderungen mit sich, bietet uns aber auch mehr Tools und Bibliotheken zur Lösung praktischer Probleme. Ob es um die Verarbeitung von Bildern, die Netzwerkkommunikation oder andere Bereiche geht, Golang ist eine leistungsstarke und beliebte Wahl.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Golang zum schrittweisen Laden und Komprimieren von Bildern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn