Obwohl Go robuste Bildbearbeitungsfunktionen bietet, stehen Benutzer oft vor der Herausforderung, ein einzelnes Bild aus mehreren kleineren Bildern zu erstellen . Wie können konkret zwei PNG- oder JPEG-Dateien zu einem Gesamtbild verkettet werden?
Der bereitgestellte Code zeigt das Einlesen von PNG-Dateien in ein RGBA-Format:
imgFile, err := os.Open(path) if err != nil { return Image{}, err } img, _, err := image.Decode(imgFile) if err != nil { return Image{}, err } rgba := image.NewRGBA(img.Bounds()) if rgba.Stride != rgba.Rect.Size().X*4 { return Image{}, fmt.Errorf("unsupported stride") } draw.Draw(rgba, rgba.Bounds(), img, image.Point{0, 0}, draw.Src)
Der Kern des Problems liegt jedoch darin, zu verstehen, wie man mehrere RGBA-Datensätze in einem einzigen Bild kombiniert.
Die Lösung besteht darin, ein neues, leeres Bild (NewRGBA) von zu erstellen ausreichend groß, um beide Originalbilder aufzunehmen. Anschließend kann die Draw-Methode verwendet werden, um jedes Bild auf bestimmte Teile des erweiterten Bildes zu legen:
// Load two images imgFile1, err := os.Open("test1.jpg") if err != nil { fmt.Println(err) } imgFile2, err := os.Open("test2.jpg") if err != nil { fmt.Println(err) } img1, _, err := image.Decode(imgFile1) if err != nil { fmt.Println(err) } img2, _, err := image.Decode(imgFile2) if err != nil { fmt.Println(err) } // Starting position of the second image sp2 := image.Point{img1.Bounds().Dx(), 0} // New rectangle for the second image r2 := image.Rectangle{sp2, sp2.Add(img2.Bounds().Size())} // Rectangle for the big image r := image.Rectangle{image.Point{0, 0}, r2.Max} // Create a new image rgba := image.NewRGBA(r) // Draw the two images draw.Draw(rgba, img1.Bounds(), img1, image.Point{0, 0}, draw.Src) draw.Draw(rgba, r2, img2, image.Point{0, 0}, draw.Src) // Export the image out, err := os.Create("./output.jpg") if err != nil { fmt.Println(err) } var opt jpeg.Options opt.Quality = 80 jpeg.Encode(out, rgba, &opt)
Hinweis: Diese Methode behält die Höhe des zweiten Bildes bei. Wenn das erste Bild größer ist, wird es beschnitten.
Das obige ist der detaillierte Inhalt vonWie verkette ich Bilder in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!