Files
photodisk/internal/watermark/watermark.go
Artem Mamonov acf9b43671 Initial commit
2025-02-06 02:36:10 +01:00

68 lines
1.2 KiB
Go

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)
}