You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.4 KiB
75 lines
1.4 KiB
package drawimg |
|
|
|
import ( |
|
"context" |
|
"go-common/app/interface/main/creative/conf" |
|
"go-common/library/log" |
|
"os" |
|
"strconv" |
|
"time" |
|
) |
|
|
|
// Dao define |
|
type Dao struct { |
|
// conf |
|
c *conf.Config |
|
// watermark |
|
dw *DrawImg |
|
} |
|
|
|
// New init dao |
|
func New(c *conf.Config) (d *Dao) { |
|
if !isExist(c.WaterMark.FontFile) { |
|
log.Error("font file not exist") |
|
return |
|
} |
|
if !isExist(c.WaterMark.UnameMark) { |
|
log.Error("uname image file not exist") |
|
return |
|
} |
|
if !isExist(c.WaterMark.UIDMark) { |
|
log.Error("uid image file not exist") |
|
return |
|
} |
|
d = &Dao{ |
|
c: c, |
|
dw: NewDrawImg(c.WaterMark.FontFile, c.WaterMark.FontSize), |
|
} |
|
return |
|
} |
|
|
|
// Make create watermark. |
|
func (d *Dao) Make(c context.Context, mid int64, text string, isUname bool) (dw *DrawImg, err error) { |
|
var src string |
|
if isUname { |
|
src = d.c.WaterMark.UnameMark |
|
} else { |
|
src = d.c.WaterMark.UIDMark |
|
} |
|
img, err := d.dw.ReadSrcImg(src) |
|
if err != nil { |
|
return |
|
} |
|
if img == nil { |
|
return |
|
} |
|
d.dw.srcImg = img |
|
midStr := strconv.FormatInt(mid, 10) |
|
timestamp := strconv.FormatInt(time.Now().Unix(), 10) |
|
file := d.c.WaterMark.SaveImg + midStr + "-" + timestamp + ".png" |
|
if err = d.dw.Draw(text, file, isUname); err != nil { |
|
log.Error("d.dw.Draw error(%v)", err) |
|
return |
|
} |
|
dw = &DrawImg{ |
|
CanvasWidth: d.dw.CanvasWidth, |
|
CanvasHeight: d.dw.CanvasHeight, |
|
File: file, |
|
} |
|
return |
|
} |
|
|
|
func isExist(path string) bool { |
|
_, err := os.Stat(path) |
|
return err == nil || os.IsExist(err) |
|
}
|
|
|