From c02455d509d12355228c551296c26701029df3c0 Mon Sep 17 00:00:00 2001 From: Havoc412 <2993167370@qq.com> Date: Sun, 20 Oct 2024 11:50:26 +0800 Subject: [PATCH] add resize func --- .../controller/web/encounter_controller.go | 8 +++ app/service/upload_file/image_file.go | 51 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/app/http/controller/web/encounter_controller.go b/app/http/controller/web/encounter_controller.go index 944c066..638f1b2 100644 --- a/app/http/controller/web/encounter_controller.go +++ b/app/http/controller/web/encounter_controller.go @@ -1,6 +1,9 @@ package web import ( + "catface/app/global/variable" + "catface/app/http/validator/core/data_transfer" + "github.com/gin-gonic/gin" ) @@ -9,7 +12,12 @@ type Encounters struct { func (e *Encounters) Create(context *gin.Context) { // TODO 处理 Photos 文件,然后处理出 Avatar,并获取压缩后的 宽高,以及文件的存储路径。 + photos := data_transfer.GetStringSlice(context, "photos") + if len(photos) > 0 { + avatar := photos[0] + avatarWidth := variable.ConfigYml.GetFloat64("FileUploadSetting.AvatarWidth") + } // Real Insert // if model.CreateEncounterFactory("").InsertDate(context) { // response.Success(context, consts.CurdStatusOkMsg, "") diff --git a/app/service/upload_file/image_file.go b/app/service/upload_file/image_file.go index c6ff72d..33cf448 100644 --- a/app/service/upload_file/image_file.go +++ b/app/service/upload_file/image_file.go @@ -1 +1,52 @@ package upload_file + +import ( + "image" + "image/jpeg" + "os" +) + +// ResizeImage 按照指定宽度等比例缩放图片 +func ResizeImage(srcPath string, dstPath string, targetWidth int) error { + // 打开源图片文件 + srcFile, err := os.Open(srcPath) + if err != nil { + return err + } + defer srcFile.Close() + + // 解码源图片 + srcImg, _, err := image.Decode(srcFile) + if err != nil { + return err + } + + // 获取源图片的尺寸 + bounds := srcImg.Bounds() + srcWidth := bounds.Dx() + srcHeight := bounds.Dy() + + // 计算目标高度 + targetHeight := int(float64(srcHeight) * (float64(targetWidth) / float64(srcWidth))) + + // 创建目标图片 + dstImg := image.NewRGBA(image.Rect(0, 0, targetWidth, targetHeight)) + + // 使用高质量的滤波算法进行缩放 + draw.CatmullRom.Scale(dstImg, dstImg.Bounds(), srcImg, srcImg.Bounds(), draw.Over, nil) + + // 打开目标图片文件 + dstFile, err := os.Create(dstPath) + if err != nil { + return err + } + defer dstFile.Close() + + // 编码并保存目标图片 + err = jpeg.Encode(dstFile, dstImg, nil) + if err != nil { + return err + } + + return nil +}