From 13bc6aee9800b9b8922494123030b3036cecdd44 Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Fri, 8 Aug 2025 18:27:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E7=BC=A9=E6=94=BE=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=8A=A0=E8=BD=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/xibao/image_gen.go | 5 ++-- util/picture.go | 59 ++++++++++++++++++++++---------------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/service/xibao/image_gen.go b/service/xibao/image_gen.go index aa319be..a863440 100644 --- a/service/xibao/image_gen.go +++ b/service/xibao/image_gen.go @@ -195,9 +195,10 @@ func GenerateCongratulationImageNew(textOrImg qq_message.QQMessage, inputFile, o log.Print("无法下载图片:", err) return } - im, _, err := sprite.LoadImageFile(filePath) + //缩放图片 + im, _, err := util.ResizeImageByMaxHeightAndWidth2Image(filePath, uint(backgroundImageSprite.GetCurrentImage().Bounds().Dy())/2, uint(backgroundImageSprite.GetCurrentImage().Bounds().Dx())/4*3) if err != nil { - log.Print("无法加载图片:", err) + log.Print("无法缩放图片:", err) return } imgSprite := sprite.Sprite{ diff --git a/util/picture.go b/util/picture.go index df8acd7..b6f72b8 100644 --- a/util/picture.go +++ b/util/picture.go @@ -10,6 +10,7 @@ import ( "path/filepath" "strings" + "git.lxtend.com/lixiangwuxian/imagedd/sprite" "github.com/nfnt/resize" ) @@ -182,40 +183,50 @@ func ResizeImageByMaxHeight2Image(imagePath string, maxHeight uint) (output []im return nil, nil, err } defer file.Close() + img, delay, err := sprite.LoadImageFile(imagePath) - // 解码图片 - var img image.Image - var decodeErr error - - var gifImg *gif.GIF - - ext := strings.ToLower(filepath.Ext(imagePath)) - switch ext { - case ".jpg", ".jpeg": - img, decodeErr = jpeg.Decode(file) - case ".png": - img, decodeErr = png.Decode(file) - case ".gif": - gifImg, decodeErr = gif.DecodeAll(file) - default: - return nil, nil, errors.New("unsupported image format") - } - - if decodeErr != nil { - return nil, nil, decodeErr + if err != nil { + return nil, nil, err } // 计算缩放后的尺寸,保持宽高比 // 传入0作为宽度,resize包会自动计算等比例的宽度 var resized []image.Image - if gifImg == nil { - resized = []image.Image{resize.Resize(0, maxHeight, img, resize.Lanczos3)} + if len(img) == 1 { + resized = []image.Image{resize.Resize(0, maxHeight, img[0], resize.Lanczos3)} } else { - for _, frame := range gifImg.Image { + for _, frame := range img { img := resize.Resize(0, maxHeight, frame, resize.Lanczos3) resized = append(resized, img) } - delay = gifImg.Delay + } + return resized, delay, nil +} + +func ResizeImageByMaxHeightAndWidth2Image(imagePath string, maxHeight uint, maxWidth uint) (output []image.Image, delay []int, err error) { + // 打开源图片文件 + file, err := os.Open(imagePath) + if err != nil { + return nil, nil, err + } + defer file.Close() + img, delay, err := sprite.LoadImageFile(imagePath) + + if err != nil { + return nil, nil, err + } + + // 计算缩放后的尺寸,保持宽高比 + // 传入0作为宽度,resize包会自动计算等比例的宽度 + var resized []image.Image + if len(img) == 1 { + resized = []image.Image{resize.Resize(0, maxHeight, img[0], resize.Lanczos3)} + } else { + for _, frame := range img { + img := resize.Resize(0, maxHeight, frame, resize.Lanczos3) + img = resize.Resize(maxWidth, 0, img, resize.Lanczos3) + resized = append(resized, img) + } } return resized, delay, nil }