增加上传图片
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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 ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user