Arbeiten mit Bildern in Go (Golang): image, draw, imaging, resize

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): Von den Grundlagen bis zu fortgeschrittenen Werkzeugen



Go (Golang) bietet leistungsstarke integrierte Werkzeuge für die Arbeit mit Rastergrafiken sowie ein reichhaltiges Ökosystem an Drittanbieter-Bibliotheken. In diesem Artikel betrachten wir sowohl die Standardpakete image, image/color, image/draw und image/png als auch die beliebten Bibliotheken imaging, resize und gg zur Lösung typischer Aufgaben: Laden, Größenänderung, Überlagerung, Zeichnen und Speichern von Bildern.



Standard-Go-Pakete für die Bildbearbeitung



Die Go-Standardbibliothek enthält grundlegende Typen und Funktionen für die Arbeit mit Bildern, die 80% der alltäglichen Aufgaben abdecken.



  • image — definiert das Interface Image und konkrete Typen: RGBA, NRGBA, Gray, Paletted u.a.
  • image/color — beschreibt Farben und Farbmodelle (Color, RGBA, NRGBA, Gray).
  • image/draw — stellt Algorithmen zum Zeichnen und Überlagern von Bildern bereit (Porter-Duff-Compositing).
  • image/png, image/jpeg, image/gif — Codecs zum Lesen/Schreiben der entsprechenden Formate.


Beispiel 1: Erstellen und Speichern eines PNG mit Farbverlauf



package main

import ( "image" "image/color" "image/png" "os")

func main() { // Neues RGBA-Bild 200x200 erstellen width, height := 200, 200 img := image.NewRGBA(image.Rect(0, 0, width, height))

// Pixel mit einem Farbverlauf von Rot nach Blau füllen for y := 0; y < height; y++ { for x := 0; x < width; x++ { // Koeffizient von 0 bis 1 ratio := float64(x) / float64(width) r := uint8(255 * (1 - ratio)) b := uint8(255 * ratio) g := uint8(128) img.Set(x, y, color.RGBA{r, g, b, 255}) } }

// In Datei speichern f, _ := os.Create("gradient.png") defer f.Close() png.Encode(f, img)}


Beispiel 2: JPEG laden, Text überlagern (via image/draw)



package main

import ( "image" "image/color" "image/draw" "image/jpeg" "image/png" "os")

func main() { // Quellbild öffnen srcFile, _ := os.Open("input.jpg") defer srcFile.Close() src, _, _ := image.Decode(srcFile)

// Kopie in RGBA erstellen, um zeichnen zu können bounds := src.Bounds() dst := image.NewRGBA(bounds) draw.Draw(dst, bounds, src, bounds.Min, draw.Src)

// Rotes Rechteck in der oberen linken Ecke zeichnen redRect := image.NewUniform(color.RGBA{255, 0, 0, 200}) rect := image.Rect(10, 10, 150, 80) draw.Draw(dst, rect, redRect, image.Point{}, draw.Over)

// Ergebnis speichern outFile, _ := os.Create("output.png") defer outFile.Close() png.Encode(outFile, dst)}


Bibliothek imaging: Hochwertige Verarbeitung



imaging (github.com/disintegration/imaging) ist eine beliebte Bibliothek, die eine benutzerfreundliche API für die häufigsten Operationen bietet: Größenänderung, Zuschneiden, Drehen, Anwenden von Filtern und Konvertierung.



  • imaging.Open() — Bild aus Datei laden.
  • imaging.Resize() — Größe ändern unter Beibehaltung der Proportionen.
  • imaging.Fit() — In ein bestimmtes Rechteck einpassen.
  • imaging.Fill() — Auf exakte Größe zuschneiden und skalieren.
  • imaging.Rotate() — Um einen bestimmten Winkel drehen.
  • imaging.Blur(), imaging.Sharpen() — Filter.


Beispiel 3: Größenänderung mit

Empfehlungen