增加上传图片

This commit is contained in:
2024-09-30 08:40:57 +08:00
parent f91fb16996
commit 17c92e648c
8 changed files with 349 additions and 2 deletions
+43
View File
@@ -0,0 +1,43 @@
package utils
import (
"bytes"
"fmt"
"github.com/disintegration/imaging"
"image"
)
// AddWatermarkToImage 添加图片水印
func AddWatermarkToImage(fileBytes []byte, watermarkPath string) ([]byte, error) {
// 将字节切片转为io.Reader
reader := bytes.NewReader(fileBytes)
// 从字节流中解码图片
srcImage, err := imaging.Decode(reader)
if err != nil {
return nil, fmt.Errorf("图片解码失败: %w", err)
}
// 打开水印图片
watermarkImage, err := imaging.Open(watermarkPath)
if err != nil {
return nil, fmt.Errorf("水印图片加载失败: %w", err)
}
// 获取原图片的宽高,用于水印的位置计算
srcBounds := srcImage.Bounds()
watermarkBounds := watermarkImage.Bounds()
// 将水印添加到原图片的右下角
offset := image.Pt(srcBounds.Max.X-watermarkBounds.Max.X, srcBounds.Max.Y-watermarkBounds.Max.Y)
dstImage := imaging.Overlay(srcImage, watermarkImage, offset, 1.0)
// 将处理后的图片保存到字节切片中
var outputBuffer bytes.Buffer
err = imaging.Encode(&outputBuffer, dstImage, imaging.PNG)
if err != nil {
return nil, fmt.Errorf("图片编码失败: %w", err)
}
return outputBuffer.Bytes(), nil
}
+10
View File
@@ -28,3 +28,13 @@ func AddDomain(url string) string {
}
return config.C.Domain + "/share/" + url
}
// GetExtension 解析并返回字符串中 `.` 后面的部分
func GetExtension(s string) string {
// 使用 strings.Split 分割字符串
parts := strings.Split(s, ".")
if len(parts) > 1 {
return parts[len(parts)-1]
}
return ""
}