diff --git a/deploy-light.js b/deploy-light.js index 33d5d28..1313d5f 100644 --- a/deploy-light.js +++ b/deploy-light.js @@ -14,6 +14,7 @@ var packageJson = require('./package'); packageJson.name += '-light'; delete packageJson.dependencies['canvas']; delete packageJson.dependencies['mapbox-gl-native']; +delete packageJson.dependencies['node-pngquant-native']; delete packageJson.dependencies['sharp']; delete packageJson.devDependencies; diff --git a/package.json b/package.json index 1b32a3c..e32af1b 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "mapbox-gl-native": "3.3.2", "mbtiles": "0.9.0", "morgan": "1.7.0", + "node-pngquant-native": "1.0.4", "nomnom": "1.8.1", "request": "2.74.0", "sharp": "0.15.1", diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 1400dc2..9400d0b 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -18,6 +18,7 @@ var Canvas = require('canvas'), mercator = new (require('sphericalmercator'))(), mbgl = require('mapbox-gl-native'), mbtiles = require('mbtiles'), + pngquant = require('node-pngquant-native'), request = require('request'); var utils = require('./utils'); @@ -294,21 +295,26 @@ module.exports = function(options, repo, params, id, dataResolver) { image.toFormat(format); - var formatEncoding = (params.formatEncoding || {})[format] || - (options.formatEncoding || {})[format]; + var formatQuality = (params.formatQuality || {})[format] || + (options.formatQuality || {})[format]; if (format == 'png') { - image.compressionLevel(formatEncoding || 6) - .withoutAdaptiveFiltering(); + image.withoutAdaptiveFiltering(); } else if (format == 'jpeg') { - image.quality(formatEncoding || 80); + image.quality(formatQuality || 80); } else if (format == 'webp') { - image.quality(formatEncoding || 90); + image.quality(formatQuality || 90); } image.toBuffer(function(err, buffer, info) { if (!buffer) { return res.status(404).send('Not found'); } + if (format == 'png') { + buffer = pngquant.compress(buffer, { + quality: [0, formatQuality || 90] + }); + } + res.set({ 'Last-Modified': lastModified, 'Content-Type': 'image/' + format