feat: 添加图片缩放功能,优化图片加载逻辑
This commit is contained in:
parent
94beb84d6d
commit
13bc6aee98
@ -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{
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user