50 lines
981 B
Go
50 lines
981 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"image"
|
||
|
"image/draw"
|
||
|
"image/jpeg"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
imgFile1, err := os.Open("img1.jpg")
|
||
|
if err != nil {
|
||
|
fmt.Println(err)
|
||
|
}
|
||
|
imgFile2, err := os.Open("img2.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 (bottom left)
|
||
|
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}
|
||
|
rgba := image.NewRGBA(r)
|
||
|
|
||
|
draw.Draw(rgba, img1.Bounds(), img1, image.Point{0, 0}, draw.Src)
|
||
|
draw.Draw(rgba, r2, img2, image.Point{0, 0}, draw.Src)
|
||
|
|
||
|
out, err := os.Create("./output.jpg")
|
||
|
if err != nil {
|
||
|
fmt.Println(err)
|
||
|
}
|
||
|
|
||
|
var opt jpeg.Options
|
||
|
opt.Quality = 80
|
||
|
|
||
|
jpeg.Encode(out, rgba, &opt)
|
||
|
}
|