Erstellen Sie ein neues leeres Bild (NewRGBA), das groß genug für beide Bilder ist. Verwenden Sie dann die Methode Draw
, um jedes Bild auf geeignete Teile dieses neuen großen Bildes zu zeichnen.
Hier sind Schritte mit Code.
Laden Sie zwei Bilder.
imgFile1, err := os.Open("test1.jpg")
imgFile2, err := os.Open("test2.jpg")
if err != nil {
fmt.Println(err)
}
img1, _, err := image.Decode(imgFile1)
img2, _, err := image.Decode(imgFile2)
if err != nil {
fmt.Println(err)
}
Lassen Sie uns das zweite Bild auf der rechten Seite des ersten Bildes zeichnen. Der Ausgangspunkt sollte also (w, 0)
sein, wobei w
die Breite des ersten Bildes ist. Der untere rechte Punkt des ersten Bildes ist der untere linke Punkt des zweiten Bildes.
//starting position of the second image (bottom left)
sp2 := image.Point{img1.Bounds().Dx(), 0}
Es sollte in einem Rechteck groß genug sein, um es zu halten.
//new rectangle for the second image
r2 := image.Rectangle{sp2, sp2.Add(img2.Bounds().Size())}
Erstellen Sie nun ein großes Rechteck, das breit genug für beide Bilder ist.
//rectangle for the big image
r := image.Rectangle{image.Point{0, 0}, r2.Max}
Hinweis Dieses große Bild hat die Höhe des zweiten Bildes. Wenn das erste Bild höher ist, wird es beschnitten.
Erstellen Sie ein neues Bild.
rgba := image.NewRGBA(r)
Jetzt können Sie
draw.Draw(rgba, img1.Bounds(), img1, image.Point{0, 0}, draw.Src)
draw.Draw(rgba, r2, img2, image.Point{0, 0}, draw.Src)
die beiden Bilder in dieses neue Bild zeichnen Da wir r2
erstellt seine so nach rechts dem ersten Bild, wird zweites Bild nach rechts gezogen werden.
Endlich können Sie es exportieren.
out, err := os.Create("./output.jpg")
if err != nil {
fmt.Println(err)
}
var opt jpeg.Options
opt.Quality = 80
jpeg.Encode(out, rgba, &opt)
Welche Art von Schwierigkeiten haben Sie? Was hast du bisher versucht? In jedem Fall besteht das allgemeine Prinzip darin, ein neues, großes Zielbild zu erzeugen und dann Pixel von den Quellbildern in das Zielbild zu kopieren. – Aedolon
Nun bis jetzt bin ich nur in der Lage, die Pixeldaten von einem PNG zu nehmen und ein neues RGBA zu bilden und dieses dann intern als ein png zu decodieren, das ich zu OpenGL übergebe. Allerdings bin ich nicht ganz sicher, wie man diese "decodierten" PNG-Daten, die ich aus der PNG-Datei lesen und kopieren/erstellen ein größeres Bild von diesem – efel