thumb improvement

pull/1044/head
kikoqiu 4 years ago
parent d347b16521
commit 5d7cb19221

@ -73,6 +73,10 @@ type thumb struct {
MaxWidth uint MaxWidth uint
MaxHeight uint MaxHeight uint
FileSuffix string `validate:"min=1"` FileSuffix string `validate:"min=1"`
MaxTaskCount int
EncodeMethod string `validate:"eq=jpg|eq=png"`
EncodeQuality int `validate:"gte=1,lte=100"`
GCAfterGen bool
} }
// 跨域配置 // 跨域配置

@ -54,6 +54,10 @@ var ThumbConfig = &thumb{
MaxWidth: 400, MaxWidth: 400,
MaxHeight: 300, MaxHeight: 300,
FileSuffix: "._thumb", FileSuffix: "._thumb",
MaxTaskCount: -1,
EncodeMethod: "jpg",
GCAfterGen: false,
EncodeQuality: 85,
} }
// SlaveConfig 从机配置 // SlaveConfig 从机配置

@ -65,20 +65,23 @@ type Pool struct {
// Init 初始化任务池 // Init 初始化任务池
func getThumbWorker() *Pool { func getThumbWorker() *Pool {
once.Do(func() { once.Do(func() {
maxWorker := model.GetIntSetting("max_thumb_worker_num", runtime.GOMAXPROCS(0)) maxWorker := conf.ThumbConfig.MaxTaskCount
if maxWorker <= 0 {
maxWorker = runtime.GOMAXPROCS(0)
}
thumbPool = &Pool{ thumbPool = &Pool{
worker: make(chan int, maxWorker), worker: make(chan int, maxWorker),
} }
util.Log().Info("初始化Thumb任务队列WorkerNum = %d", maxWorker) util.Log().Debug("初始化Thumb任务队列WorkerNum = %d", maxWorker)
}) })
return thumbPool return thumbPool
} }
func (pool *Pool) addWorker() { func (pool *Pool) addWorker() {
pool.worker <- 1 pool.worker <- 1
util.Log().Info("Thumb任务队列addWorker") util.Log().Debug("Thumb任务队列addWorker")
} }
func (pool *Pool) releaseWorker() { func (pool *Pool) releaseWorker() {
util.Log().Info("Thumb任务队列releaseWorker") util.Log().Debug("Thumb任务队列releaseWorker")
<-pool.worker <-pool.worker
} }
@ -116,6 +119,12 @@ func (fs *FileSystem) GenerateThumbnail(ctx context.Context, file *model.File) {
image.GetThumb(fs.GenerateThumbnailSize(w, h)) image.GetThumb(fs.GenerateThumbnailSize(w, h))
// 保存到文件 // 保存到文件
err = image.Save(util.RelativePath(file.SourceName + conf.ThumbConfig.FileSuffix)) err = image.Save(util.RelativePath(file.SourceName + conf.ThumbConfig.FileSuffix))
image = nil
if conf.ThumbConfig.GCAfterGen {
util.Log().Debug("GenerateThumbnail runtime.GC")
runtime.GC()
}
if err != nil { if err != nil {
util.Log().Warning("无法保存缩略图:%s", err) util.Log().Warning("无法保存缩略图:%s", err)
return return

@ -12,6 +12,7 @@ import (
"strings" "strings"
model "github.com/cloudreve/Cloudreve/v3/models" model "github.com/cloudreve/Cloudreve/v3/models"
"github.com/cloudreve/Cloudreve/v3/pkg/conf"
"github.com/cloudreve/Cloudreve/v3/pkg/util" "github.com/cloudreve/Cloudreve/v3/pkg/util"
//"github.com/nfnt/resize" //"github.com/nfnt/resize"
@ -77,8 +78,13 @@ func (image *Thumb) Save(path string) (err error) {
return err return err
} }
defer out.Close() defer out.Close()
switch conf.ThumbConfig.EncodeMethod {
case "png":
err = png.Encode(out, image.src) err = png.Encode(out, image.src)
default:
err = jpeg.Encode(out, image.src, &jpeg.Options{Quality: conf.ThumbConfig.EncodeQuality})
}
return err return err
} }

@ -10,6 +10,7 @@ import (
"sync" "sync"
model "github.com/cloudreve/Cloudreve/v3/models" model "github.com/cloudreve/Cloudreve/v3/models"
"github.com/cloudreve/Cloudreve/v3/pkg/conf"
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem" "github.com/cloudreve/Cloudreve/v3/pkg/filesystem"
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/driver/local" "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/driver/local"
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/fsctx" "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/fsctx"
@ -180,7 +181,7 @@ func Thumb(c *gin.Context) {
} }
defer resp.Content.Close() defer resp.Content.Close()
http.ServeContent(c.Writer, c.Request, "thumb.png", fs.FileTarget[0].UpdatedAt, resp.Content) http.ServeContent(c.Writer, c.Request, "thumb."+conf.ThumbConfig.EncodeMethod, fs.FileTarget[0].UpdatedAt, resp.Content)
} }

Loading…
Cancel
Save