Просмотр исходного кода

Use jimp instead of lwip for image processing

Jimp does not install on recent versions of NodeJS because of changes
in the bundled version of zlib. Jimp is a pure JS replacement.
Paul Hooijenga 7 лет назад
Родитель
Сommit
3fc0d9418f
4 измененных файлов с 31 добавлено и 31 удалено
  1. 8 8
      lib/screenshotHandler.js
  2. 1 1
      package.json
  3. 16 16
      test/api/screenshotHandlerTest.js
  4. 6 6
      test/core/redownloadTest.js

+ 8 - 8
lib/screenshotHandler.js

@@ -1,5 +1,5 @@
 var debug       = require('debug')('ylt:screenshotHandler');
-var lwip        = require('lwip');
+var Jimp        = require('jimp');
 var tmp         = require('temporary');
 var Q           = require('q');
 var fs          = require('fs');
@@ -57,7 +57,7 @@ var screenshotHandler = function() {
     this.openImage = function(imagePath) {
         var deferred = Q.defer();
 
-        lwip.open(imagePath, function(err, image){
+        Jimp.read(imagePath, function(err, image){
             if (err) {
                 debug('Could not open imagePath %s', imagePath);
                 debug(err);
@@ -76,7 +76,7 @@ var screenshotHandler = function() {
     this.resizeImage = function(image, newWidth) {
         var deferred = Q.defer();
 
-        var currentWidth = image.width();
+        var currentWidth = image.bitmap.width;
         var ratio = newWidth / currentWidth;
 
         image.scale(ratio, function(err, image){
@@ -101,7 +101,7 @@ var screenshotHandler = function() {
         var deferred = Q.defer();
 
         // Create a canvas with the same dimensions as your image:
-        lwip.create(image.width(), image.height(), 'white', function(err, canvas){
+        new Jimp(image.bitmap.width, image.bitmap.height, 0xFFFFFF, function(err, canvas){
             if (err) {
                 debug('Could not create a white canvas');
                 debug(err);
@@ -109,7 +109,7 @@ var screenshotHandler = function() {
                 deferred.reject(err);
             } else {
                 // Paste original image on top of the canvas
-                canvas.paste(0, 0, image, function(err, image){
+                canvas.composite(image, 0, 0, function(err, image){
                     if (err) {
                         debug('Could not paste image on the white canvas');
                         debug(err);
@@ -131,7 +131,7 @@ var screenshotHandler = function() {
     this.toBuffer = function(image) {
         var deferred = Q.defer();
 
-        image.toBuffer('jpg', {quality: 90}, function(err, buffer){
+        image.quality(90).getBuffer(Jimp.MIME_JPEG, function(err, buffer){
             if (err) {
                 debug('Could not save image to buffer');
                 debug(err);
@@ -143,7 +143,7 @@ var screenshotHandler = function() {
             }
         });
 
-        return deferred.promise;        
+        return deferred.promise;
     };
 
 
@@ -167,4 +167,4 @@ var screenshotHandler = function() {
     };
 };
 
-module.exports = new screenshotHandler();
+module.exports = new screenshotHandler();

+ 1 - 1
package.json

@@ -55,7 +55,7 @@
     "is-ttf": "0.2.2",
     "is-woff": "1.0.3",
     "is-woff2": "1.0.0",
-    "lwip": "0.0.9",
+    "jimp": "0.2.28",
     "md5": "2.2.1",
     "meow": "3.7.0",
     "minimize": "2.0.0",

+ 16 - 16
test/api/screenshotHandlerTest.js

@@ -7,17 +7,17 @@ var path = require('path');
 describe('screenshotHandler', function() {
 
     var imagePath = path.join(__dirname, '../fixtures/logo-large.png');
-    var screenshot, lwipImage;
+    var screenshot, jimpImage;
 
-    
-    it('should open an image and return an lwip object', function(done) {
+
+    it('should open an image and return an jimp object', function(done) {
         ScreenshotHandler.openImage(imagePath)
             .then(function(image) {
-                lwipImage = image;
+                jimpImage = image;
 
-                lwipImage.should.be.an('object');
-                lwipImage.width().should.equal(620);
-                lwipImage.height().should.equal(104);
+                jimpImage.should.be.an('object');
+                jimpImage.bitmap.width.should.equal(620);
+                jimpImage.bitmap.height.should.equal(104);
 
                 done();
             })
@@ -26,14 +26,14 @@ describe('screenshotHandler', function() {
             });
     });
 
-    
-    it('should resize an lwip image', function(done) {
-        ScreenshotHandler.resizeImage(lwipImage, 310)
+
+    it('should resize an jimp image', function(done) {
+        ScreenshotHandler.resizeImage(jimpImage, 310)
             .then(function(image) {
-                lwipImage = image;
+                jimpImage = image;
 
-                lwipImage.width().should.equal(310);
-                lwipImage.height().should.equal(52);
+                jimpImage.bitmap.width.should.equal(310);
+                jimpImage.bitmap.height.should.equal(52);
 
                 done();
             })
@@ -43,8 +43,8 @@ describe('screenshotHandler', function() {
     });
 
 
-    it('should transform a lwip image into a buffer', function(done) {
-        ScreenshotHandler.toBuffer(lwipImage)
+    it('should transform a jimp image into a buffer', function(done) {
+        ScreenshotHandler.toBuffer(jimpImage)
             .then(function(buffer) {
                 buffer.should.be.an.instanceof(Buffer);
                 done();
@@ -125,4 +125,4 @@ describe('screenshotHandler', function() {
                 done(err);
             });
     });
-});
+});

+ 6 - 6
test/core/redownloadTest.js

@@ -228,14 +228,14 @@ describe('redownload', function() {
             newEntry.weightCheck.bodySize.should.equal(4193);
             newEntry.weightCheck.bodyBuffer.should.deep.equal(fileContent);
 
-            // Opening the image in lwip to check if the format is good
-            var lwip = require('lwip');
-            lwip.open(newEntry.weightCheck.bodyBuffer, 'png', function(err, image) {
-                image.width().should.equal(620);
-                image.height().should.equal(104);
+            // Opening the image in jimp to check if the format is good
+            var Jimp = require('jimp');
+            Jimp.read(newEntry.weightCheck.bodyBuffer, function(err, image) {
+                image.bitmap.width.should.equal(620);
+                image.bitmap.height.should.equal(104);
                 done(err);
             });
-            
+
         })
 
         .fail(function(err) {