Ver código fonte

Add resize algorithm option

j433866 6 anos atrás
pai
commit
0d86a7e427
1 arquivos alterados com 23 adições e 2 exclusões
  1. 23 2
      src/core/operations/ResizeImage.mjs

+ 23 - 2
src/core/operations/ResizeImage.mjs

@@ -48,6 +48,18 @@ class ResizeImage extends Operation {
                 name: "Maintain aspect ratio",
                 type: "boolean",
                 value: false
+            },
+            {
+                name: "Resizing algorithm",
+                type: "option",
+                value: [
+                    "Nearest Neighbour",
+                    "Bilinear",
+                    "Bicubic",
+                    "Hermite",
+                    "Bezier"
+                ],
+                defaultIndex: 1
             }
         ];
     }
@@ -62,8 +74,17 @@ class ResizeImage extends Operation {
             height = args[1];
         const unit = args[2],
             aspect = args[3],
+            resizeAlg = args[4],
             type = Magic.magicFileType(input);
 
+        const resizeMap = {
+            "Nearest Neighbour": jimp.RESIZE_NEAREST_NEIGHBOR,
+            "Bilinear": jimp.RESIZE_BILINEAR,
+            "Bicubic": jimp.RESIZE_BICUBIC,
+            "Hermite": jimp.RESIZE_HERMITE,
+            "Bezier": jimp.RESIZE_BEZIER
+        };
+        
         if (!type || type.mime.indexOf("image") !== 0){
             throw new OperationError("Invalid file type.");
         }
@@ -74,9 +95,9 @@ class ResizeImage extends Operation {
             height = image.getHeight() * (height / 100);
         }
         if (aspect) {
-            image.scaleToFit(width, height);
+            image.scaleToFit(width, height, resizeMap[resizeAlg]);
         } else {
-            image.resize(width, height);
+            image.resize(width, height, resizeMap[resizeAlg]);
         }
 
         const imageBuffer = await image.getBufferAsync(jimp.AUTO);