From 9ff936d0c156900b711157bc340dbf1656152da2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Mon, 11 Dec 2023 10:17:17 +0800 Subject: [PATCH] =?UTF-8?q?WebP=E8=BD=AC=E6=8D=A2=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E8=BD=AC=E7=A7=BB=E5=88=B0WebP=E7=AD=96=E7=95=A5=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/nodes/http_writer.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/internal/nodes/http_writer.go b/internal/nodes/http_writer.go index 40a4104..3ec9555 100644 --- a/internal/nodes/http_writer.go +++ b/internal/nodes/http_writer.go @@ -67,6 +67,7 @@ type HTTPWriter struct { // WebP webpIsEncoding bool webpOriginContentType string + webpQuality int // Compression compressionConfig *serverconfigs.HTTPCompressionConfig @@ -470,8 +471,8 @@ func (this *HTTPWriter) PrepareCache(resp *http.Response, size int64) { contentTypeWritten = true } - err := cacheWriter.WriteAt(start, data) - if err != nil { + writeErr := cacheWriter.WriteAt(start, data) + if writeErr != nil { hasError = true this.cacheIsFinished = false } @@ -518,6 +519,7 @@ func (this *HTTPWriter) PrepareWebP(resp *http.Response, size int64) { if policy.RequireCache && this.req.cacheRef == nil { return } + this.webpQuality = policy.Quality // 限制最小和最大尺寸 // TODO 需要将reader修改为LimitReader @@ -1092,9 +1094,17 @@ func (this *HTTPWriter) finishWebP() { return } - var f = types.Float32(this.req.web.WebP.Quality) - if f > 100 { - f = 100 + var f = types.Float32(this.webpQuality) + if f <= 0 || f > 100 { + if this.size > (8<<20) || this.size <= 0 { + f = 30 + } else if this.size > (1 << 20) { + f = 50 + } else if this.size > (128 << 10) { + f = 60 + } else { + f = 75 + } } if imageData != nil {