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

Einführung in die Arbeit mit Bildern in Go



Go (Golang) ist eine moderne, kompilierte Sprache mit einer umfangreichen Standardbibliothek, die das Paket image für die grundlegende Arbeit mit Rasterbildern enthält. Für Aufgaben wie Skalierung, Filterung, Formatkonvertierung und Stapelverarbeitung sind jedoch oft Drittanbieter-Bibliotheken erforderlich. In diesem Artikel betrachten wir die gängigsten Werkzeuge für die Bildbearbeitung in Go, zeigen Codebeispiele und vergleichen ihre Funktionen.



Das Standardpaket image



Das Paket image aus der Go-Standardbibliothek bietet grundlegende Typen und Funktionen zum Dekodieren, Kodieren und Manipulieren von Bildern. Es unterstützt die Formate PNG, JPEG und GIF (nur Dekodierung). Beispiel zum Laden eines Bildes aus einer Datei:



package main

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

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

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

// Zugriff auf Pixel über img.At(x, y) _ = img}


Einschränkungen des Standardpakets: Fehlende integrierte Funktionen zum Ändern der Größe, Drehen, Filtern und Arbeiten mit EXIF-Daten. Für diese Aufgaben verwenden Sie Drittanbieter-Bibliotheken.



Die Bibliothek imaging



imaging ist eine der beliebtesten Bibliotheken für die Bildverarbeitung in Go. Sie bietet eine einfache API zum Ändern der Größe, Zuschneiden, Drehen, Anwenden von Filtern und Konvertieren von Formaten.



Installation:

go get github.com/disintegration/imaging


Beispiel zum Ändern der Größe unter Beibehaltung der Proportionen:



package main

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

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

// Größe auf Breite 800px ändern, Höhe wird angepasst dst := imaging.Resize(src, 800, 0, imaging.Lanczos)

err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("Fehler beim Speichern: %v", err) }}


Die Bibliothek unterstützt Filter: Weichzeichnen, Schärfen, Kontrast, Helligkeit, Graustufen. Beispiel zum Anwenden eines Filters:



grayscaleImg := imaging.Grayscale(src)sharpImg := imaging.Sharpen(src, 0.5)blurImg := imaging.Blur(src, 3.0)


Vorteile: Saubere API, GIF-Unterstützung (nur lesend), automatische Ausrichtung nach EXIF, integrierte Funktionen für Miniaturansichten und Stapelverarbeitung.



Die Bibliothek nfnt/resize



nfnt/resize ist eine spezialisierte Bibliothek zum Ändern der Bildgröße. Sie bietet mehrere Interpolationsalgorithmen (NearestNeighbor, Bilinear, Bicubic, MitchellNetravali, Lanczos2, Lanczos3).



Installation:

go get github.com/nfnt/resize


Beispiel zum Ändern der Größe auf exakt 200x200 Pixel:



package main

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

func main() { file, _ := os.Open("input.jpg") defer file.Close() img, _ := jpeg.Decode(file)

// Größe auf 200x200 ändern newImg := resize.Resize(200, 200, img, resize.Lanczos3)

out, _ := os.Create("resized.jpg") defer out.Close() jpeg.Encode(out, newImg, nil)}


Besonderheiten: Die Bibliothek arbeitet nur mit Bildern, die das Interface image.Image implementieren. Sie unterstützt kein direktes Lesen/Schreiben von Dateien – manuelles Dekodieren/Kodieren ist erforderlich.

Empfehlungen