Initial commit
This commit is contained in:
67
internal/watermark/watermark.go
Normal file
67
internal/watermark/watermark.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package watermark
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/nfnt/resize"
|
||||
"image"
|
||||
"image/draw"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func AddWatermark(origImage string, watermarkImage string) (image.Image, error) {
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
var img image.Image
|
||||
var watermark image.Image
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
var err error
|
||||
file, err := os.Open(origImage)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
img, err = jpeg.Decode(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
var err error
|
||||
watermarkFile, err := os.Open(watermarkImage)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer watermarkFile.Close()
|
||||
|
||||
watermark, err = png.Decode(watermarkFile)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}()
|
||||
wg.Wait()
|
||||
|
||||
if img == nil || watermark == nil {
|
||||
return nil, errors.New("failed to decode image")
|
||||
}
|
||||
|
||||
offset := image.Pt(10, 10)
|
||||
b := img.Bounds()
|
||||
m := image.NewRGBA(b)
|
||||
draw.Draw(m, b, img, image.Point{}, draw.Src)
|
||||
draw.Draw(m, watermark.Bounds().Add(offset), watermark, image.Point{}, draw.Over)
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func Resize(img image.Image, width int) image.Image {
|
||||
return resize.Resize(uint(width), 0, img, resize.Lanczos3)
|
||||
}
|
||||
Reference in New Issue
Block a user