Creare una nuova immagine vuota (NewRGBA) con margini sufficientemente grandi da contenere entrambe le immagini. Quindi utilizzare il metodo Draw
per disegnare ogni immagine sulle parti appropriate di questa nuova grande immagine.
Ecco i passaggi con il codice.
Caricare due immagini.
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)
}
Disegniamo la seconda immagine a destra della prima immagine. Quindi il punto di partenza dovrebbe essere (w, 0)
dove w
corrisponde alla larghezza della prima immagine. Il punto in basso a destra della prima immagine sarà il punto in basso a sinistra del secondo.
//starting position of the second image (bottom left)
sp2 := image.Point{img1.Bounds().Dx(), 0}
Dovrebbe essere in un rettangolo abbastanza grande da contenere.
//new rectangle for the second image
r2 := image.Rectangle{sp2, sp2.Add(img2.Bounds().Size())}
Ora creare un rettangolo grande che sia sufficientemente largo da contenere entrambe le immagini.
//rectangle for the big image
r := image.Rectangle{image.Point{0, 0}, r2.Max}
Nota Questa immagine grande avrà l'altezza della seconda immagine. Se la prima immagine è più alta, verrà ritagliata.
Creare una nuova immagine.
rgba := image.NewRGBA(r)
Ora è possibile disegnare le due immagini in questa nuova immagine
draw.Draw(rgba, img1.Bounds(), img1, image.Point{0, 0}, draw.Src)
draw.Draw(rgba, r2, img2, image.Point{0, 0}, draw.Src)
Dal momento che abbiamo creato r2
per cui il suo alla destra della prima immagine, seconda immagine saranno attratti verso destra.
Finalmente è possibile esportarlo.
out, err := os.Create("./output.jpg")
if err != nil {
fmt.Println(err)
}
var opt jpeg.Options
opt.Quality = 80
jpeg.Encode(out, rgba, &opt)
Che tipo di problemi hai? Cosa hai provato fino ad ora? In ogni caso, il principio generale è quello di creare una nuova, grande immagine di destinazione e quindi copiare i pixel dalle immagini di origine nell'immagine di destinazione. – Aedolon
Beh, fino ad ora sono in grado di acquisire i dati dei pixel da un png e formare un nuovo RGBA e quindi decodificarlo internamente come png e passare a OpenGL. Tuttavia, non sono abbastanza sicuro di come prendere questi dati "decodificati" png che ho letto dal file .png e copiare/creare un'immagine più grande da quello – efel