Arbeiten mit Bildern in Go (Golang): Bibliotheken und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Bildern in Go (Golang): Überblick über Bibliotheken und praktische Beispiele



Go (Golang) ist eine kompilierte, statisch typisierte Sprache, die in der Webentwicklung, bei Microservices und datenverarbeitenden Aufgaben immer beliebter wird. Im Gegensatz zu Python, wo traditionell OpenCV oder Pillow für die Bildbearbeitung verwendet werden, gibt es in Go mehrere leichte und schnelle Bibliotheken, die grundlegende Operationen mit Rastergrafiken ermöglichen: Größenänderung, Zuschneiden, Drehen, Anwenden von Filtern und Zeichnen.



In diesem Artikel betrachten wir die drei beliebtesten Bibliotheken für die Bildbearbeitung in Go: imaging, nfnt/resize und gg. Sie erfahren, wie Sie diese installieren, und sehen Codebeispiele für typische Aufgaben.



1. Die Bibliothek imaging



imaging ist eine einfache, aber leistungsstarke Bibliothek zur Bildverarbeitung. Sie bietet praktische Funktionen zum Ändern der Größe, Zuschneiden, Drehen, Anwenden von Filtern (Weichzeichnen, Schärfen, Farbinvertierung) und Speichern in verschiedenen Formaten (JPEG, PNG, GIF, BMP).



Installation

go get -u github.com/disintegration/imaging


Beispiel: Größenänderung und Zuschneiden

package main

import ( "fmt" "github.com/disintegration/imaging" "log")

func main() { // Bild öffnen src, err := imaging.Open("input.jpg") if err != nil { log.Fatalf("Fehler beim Öffnen der Datei: %v", err) }

// Größe auf 800x600 ändern, Proportionen beibehalten dst := imaging.Resize(src, 800, 600, imaging.Lanczos) // Mittleren Bereich 400x400 zuschneiden dst = imaging.CropCenter(dst, 400, 400)

// Weichzeichnungsfilter anwenden dst = imaging.Blur(dst, 3.0)

// Ergebnis speichern err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("Fehler beim Speichern: %v", err) } fmt.Println("Bild verarbeitet und als output.jpg gespeichert")}


Die Bibliothek unterstützt viele Filter: imaging.Grayscale, imaging.Invert, imaging.Contrast, imaging.Sharpen und andere. Alle funktionieren „out of the box“.



2. Die Bibliothek nfnt/resize



Wenn Ihre Aufgabe nur die Größenänderung von Bildern mit maximaler Leistung ist, ist nfnt/resize die beste Wahl. Sie ist für die Hochgeschwindigkeitsverarbeitung optimiert und unterstützt verschiedene Interpolationsalgorithmen (NearestNeighbor, Bilinear, Bicubic, Lanczos2, Lanczos3).



Installation

go get -u github.com/nfnt/resize


Beispiel: Größenänderung mit verschiedenen Algorithmen

package main

import ( "image" "image/jpeg" "log" "os" "github.com/nfnt/resize")

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

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

// Größe auf Breite 300 Pixel ändern, Höhe wird automatisch berechnet m := resize.Resize(300, 0, img, resize.Lanczos3)

out, err := os.Create("resized.jpg") if err != nil { log.Fatal(err) } defer out.Close()

// Mit JPEG-Qualität 90% speichern err = jpeg.Encode(out, m, &jpeg.Options{Quality: 90}) if err != nil { log.Fatal(err) } log.Println("Bild auf Breite 300px verkleinert")}


Diese Bibliothek bietet keine Funktionen zum Zuschneiden oder für Filter, aber ihre Geschwindigkeit und Minimalismus machen sie ideal für Server, die Tausende von Bildern pro Sekunde verarbeiten müssen.



3. Die Bibliothek gg (Zeichnen)



gg ist eine Bibliothek zum Zeichnen von 2D-Grafiken, ähnlich wie cairo oder Pillow Draw. Sie ermöglicht das Erstellen von Bildern

Empfehlungen