WebP压缩Gif时,自动跳过转换失败的帧,并只提示最后一次错误

This commit is contained in:
GoEdgeLab
2022-08-19 13:27:18 +08:00
parent 0c2719537f
commit 8fb9d7f36b

View File

@@ -1007,23 +1007,29 @@ func (this *HTTPWriter) finishWebP() {
Exact: true, Exact: true,
}) })
} else if gifImage != nil { } else if gifImage != nil {
anim := gowebp.NewWebpAnimation(gifImage.Config.Width, gifImage.Config.Height, gifImage.LoopCount) var anim = gowebp.NewWebpAnimation(gifImage.Config.Width, gifImage.Config.Height, gifImage.LoopCount)
anim.WebPAnimEncoderOptions.SetKmin(9) anim.WebPAnimEncoderOptions.SetKmin(9)
anim.WebPAnimEncoderOptions.SetKmax(17) anim.WebPAnimEncoderOptions.SetKmax(17)
defer anim.ReleaseMemory() defer anim.ReleaseMemory()
webpConfig := gowebp.NewWebpConfig() var webpConfig = gowebp.NewWebpConfig()
//webpConfig.SetLossless(1) //webpConfig.SetLossless(1)
webpConfig.SetQuality(f) webpConfig.SetQuality(f)
var timeline = 0 var timeline = 0
var lastErr error
for i, img := range gifImage.Image { for i, img := range gifImage.Image {
err = anim.AddFrame(img, timeline, webpConfig) err = anim.AddFrame(img, timeline, webpConfig)
if err != nil { if err != nil {
break // 有错误直接跳过
lastErr = err
err = nil
} }
timeline += gifImage.Delay[i] * 10 timeline += gifImage.Delay[i] * 10
} }
if lastErr != nil {
remotelogs.Error("HTTP_WRITER", "'"+this.req.URL()+"' encode webp failed: "+lastErr.Error())
}
if err == nil { if err == nil {
err = anim.AddFrame(nil, timeline, webpConfig) err = anim.AddFrame(nil, timeline, webpConfig)