瀏覽代碼

Move WebP enforcement/preference to processing

DarthSim 6 年之前
父節點
當前提交
7e979a9024
共有 2 個文件被更改,包括 12 次插入8 次删除
  1. 5 1
      process.go
  2. 7 7
      processing_options.go

+ 5 - 1
process.go

@@ -497,11 +497,15 @@ func processImage(ctx context.Context) ([]byte, context.CancelFunc, error) {
 	imgtype := getImageType(ctx)
 
 	if po.Format == imageTypeUnknown {
-		if vipsTypeSupportSave[imgtype] {
+		if po.PreferWebP && vipsTypeSupportSave[imageTypeWEBP] {
+			po.Format = imageTypeWEBP
+		} else if vipsTypeSupportSave[imgtype] {
 			po.Format = imgtype
 		} else {
 			po.Format = imageTypeJPEG
 		}
+	} else if po.EnforceWebP && vipsTypeSupportSave[imageTypeWEBP] {
+		po.Format = imageTypeWEBP
 	}
 
 	if !vipsSupportSmartcrop {

+ 7 - 7
processing_options.go

@@ -118,6 +118,9 @@ type processingOptions struct {
 
 	Watermark watermarkOptions
 
+	PreferWebP  bool
+	EnforceWebP bool
+
 	UsedPresets []string
 }
 
@@ -605,11 +608,6 @@ func applyFormatOption(po *processingOptions, args []string) error {
 		return fmt.Errorf("Invalid format arguments: %v", args)
 	}
 
-	if conf.EnforceWebp && po.Format == imageTypeWEBP {
-		// Webp is enforced and already set as format
-		return nil
-	}
-
 	if f, ok := imageTypes[args[0]]; ok {
 		po.Format = f
 	} else {
@@ -769,9 +767,11 @@ func defaultProcessingOptions(headers *processingHeaders) (*processingOptions, e
 		UsedPresets: make([]string, 0, len(conf.Presets)),
 	}
 
-	if (conf.EnableWebpDetection || conf.EnforceWebp) && strings.Contains(headers.Accept, "image/webp") {
-		po.Format = imageTypeWEBP
+	if strings.Contains(headers.Accept, "image/webp") {
+		po.PreferWebP = conf.EnableWebpDetection || conf.EnforceWebp
+		po.EnforceWebP = conf.EnforceWebp
 	}
+
 	if conf.EnableClientHints && len(headers.ViewportWidth) > 0 {
 		if vw, err := strconv.Atoi(headers.ViewportWidth); err == nil {
 			po.Width = vw