Heim  >  Artikel  >  Backend-Entwicklung  >  Golang-Bildtypkonvertierung

Golang-Bildtypkonvertierung

WBOY
WBOYOriginal
2023-05-15 10:09:071168Durchsuche

Go ist eine Programmiersprache, die in der Netzwerkprogrammierung, im Cloud Computing, in verteilten Systemen und in anderen Bereichen weit verbreitet ist. Auch ihre Anwendung in der Bildverarbeitung hat nach und nach Aufmerksamkeit erregt. In der Go-Sprache ist die Bildtypkonvertierung ein allgemeiner Bildverarbeitungsvorgang, mit dem Bilder in einem Format in ein anderes Format konvertiert werden können, beispielsweise Bilder im JPEG-Format in Bilder im PNG-Format. In diesem Artikel wird erläutert, wie Bildtypen in die Go-Sprache konvertiert werden.

  1. Bilder lesen

Bevor Sie den Bildtyp konvertieren, müssen Sie das Bild zuerst lesen. Das Bildpaket wird in der Standardbibliothek der Go-Sprache bereitgestellt. Zusätzlich zur Unterstützung grundlegender Pixeloperationen bietet es auch eine Schnittstelle zum Lesen und Schreiben von Bildern. Wir können die Decode-Funktion im Bildpaket verwenden, um Bilder zu lesen. Der Parameter der Decode-Funktion ist ein Parameter vom Typ io.Reader. Daher können wir die Open-Funktion im Betriebssystempaket verwenden, um eine Datei zu öffnen, und dann das Dateihandle an die Decode-Funktion übergeben.

Das Folgende ist ein Beispielcode:

package main

import (
    "fmt"
    "image"
    "os"
)

func main() {
    file, err := os.Open("image.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(img.Bounds())
}

Im obigen Beispielcode verwenden wir die Open-Funktion im Betriebssystempaket, um die Datei mit dem Namen image.jpg zu öffnen, und übergeben dann das Dateihandle zum Lesen an die image.Decode-Funktion das Bild. Die Decode-Funktion gibt ein Objekt img vom Typ image.Image und ein Codierungsformat vom Typ String zurück. Wir verwenden das _-Symbol, um das Codierungsformat zu ignorieren. Schließlich drucken wir die Grenzinformationen des Bildes (img.Bounds()), einschließlich der Breite, Höhe und anderer Informationen des Bildes.

  1. Konvertierung des Bildtyps

Natürlich erfordert die Konvertierung von Bildern in einem Format in Bilder in einem anderen Format die Verwendung von zwei verschiedenen Encodern. Die Standardbibliothek der Go-Sprache bietet eine Vielzahl von Bildkodierern, darunter JPEG, PNG, GIF, BMP und andere Formate. Unterschiedliche Bildformate verfügen über unterschiedliche Encoder, implementieren jedoch dieselbe Schnittstelle, sodass wir im Code auf die gleiche Weise Bilder in verschiedene Formate konvertieren können.

Das Folgende ist ein Beispielcode zum Konvertieren eines Bildes im JPEG-Format in ein Bild im PNG-Format:

package main

import (
    "fmt"
    "image"
    "image/jpeg"
    "image/png"
    "os"
)

func main() {
    file, err := os.Open("image.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    out, err := os.Create("image.png")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer out.Close()

    err = png.Encode(out, img)
    if err != nil {
        fmt.Println(err)
        return
    }
}

Im obigen Beispielcode verwenden wir zuerst die Funktion Dekodieren im Paket image/jpeg, um das Bild im JPEG-Format zu lesen, und dann Verwenden Sie die Encode-Funktion im Paket image/png, um das Bild in eine Datei im PNG-Format zu schreiben. Es ist zu beachten, dass wir zwar die Funktion png.Encode verwenden, diese jedoch Bilder in unterschiedlichen Formaten verarbeiten kann, da der Encoder dieselbe Schnittstelle implementiert.

  1. Bildgröße ändern

Beim Konvertieren von Bildtypen müssen Sie möglicherweise auch die Bildgröße ändern. Die Standardbibliothek der Go-Sprache stellt das Bildpaket zur Verarbeitung von Pixeldaten bereit. Entwickler können Pixel direkt bearbeiten, um die Bildgröße anzupassen. Das Bildpaket bietet eine Vielzahl von Methoden zur Größenänderung, darunter Resize, ResizeNRGBA, ResizeRGBA usw. Das Folgende ist ein Beispielcode, der die Größe des Bildes auf eine Breite von 200 Pixeln ändert:

package main

import (
    "fmt"
    "image"
    "image/jpeg"
    "image/png"
    "os"
)

func main() {
    file, err := os.Open("image.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    newImg := resize(img, 200, 0)

    out, err := os.Create("image.png")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer out.Close()

    err = png.Encode(out, newImg)
    if err != nil {
        fmt.Println(err)
        return
    }
}

func resize(img image.Image, width, height uint) image.Image {
    if height == 0 {
        height = uint(float64(width) * float64(img.Bounds().Dy()) / float64(img.Bounds().Dx()))
    }
    newImg := image.NewRGBA(image.Rect(0, 0, int(width), int(height)))
    draw.CatmullRom.Scale(newImg, newImg.Bounds(), img, img.Bounds(), draw.Src, nil)
    return newImg
}

Im obigen Beispielcode definieren wir eine Größenänderungsfunktion, in der die Funktion CatmullRom.Scale im Zeichenpaket zum Konvertieren des Originalbilds verwendet wird Größe auf die angegebene Größe ändern. Es ist zu beachten, dass die Breiten- und Höhenparameter, die wir an die Größenänderungsfunktion übergeben, die Breite bzw. Höhe des angepassten Bildes darstellen, wobei die Breite 200 Pixel beträgt und die Höhe aus dem Seitenverhältnis des Bildes berechnet wird. Auf diese Weise kann die Funktion der proportionalen Skalierung des Bildes erreicht werden.

Zusammenfassung:

In diesem Artikel wird kurz die Methode zur Bildtypkonvertierung in der Go-Sprache vorgestellt, einschließlich des Lesens von Bildern, Anpassen der Bildgröße usw. In der tatsächlichen Entwicklung können Entwickler je nach spezifischen Anforderungen eine Vielzahl von Bildkodierern und Werkzeugen zur Bildgrößenänderung auswählen, um ihre eigenen Bildverarbeitungsfunktionen zu implementieren.

Das obige ist der detaillierte Inhalt vonGolang-Bildtypkonvertierung. 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