Use svgexport instead of imagemagick

This commit is contained in:
Samy Pessé
2015-01-28 14:53:27 +01:00
parent 4e620f34ad
commit 1213997341
4 changed files with 69 additions and 45 deletions
+40 -18
View File
@@ -8,8 +8,8 @@ var Ignore = require("fstream-ignore");
var fsUtils = {
tmp: {
file: function() {
return Q.nfcall(tmp.file.bind(tmp)).get(0)
file: function(opt) {
return Q.nfcall(tmp.file.bind(tmp), opt).get(0)
},
dir: function() {
return Q.nfcall(tmp.dir.bind(tmp)).get(0)
@@ -19,19 +19,8 @@ var fsUtils = {
stat: Q.denodeify(fs.stat),
readdir: Q.denodeify(fs.readdir),
readFile: Q.denodeify(fs.readFile),
writeFile: function(filename, data, options) {
var d = Q.defer();
try {
fs.writeFileSync(filename, data, options)
} catch(err) {
d.reject(err);
}
d.resolve();
return d.promise;
},
writeFile: writeFile,
writeStream: writeStream,
mkdirp: Q.denodeify(fsExtra.mkdirp),
copy: Q.denodeify(fsExtra.copy),
remove: Q.denodeify(fsExtra.remove),
@@ -44,7 +33,40 @@ var fsUtils = {
existsSync: fs.existsSync.bind(fs),
readFileSync: fs.readFileSync.bind(fs),
clean: cleanFolder,
getUniqueFilename: getUniqueFilename
getUniqueFilename: getUniqueFilename,
}
// Write a file
function writeFile(filename, data, options) {
var d = Q.defer();
try {
fs.writeFileSync(filename, data, options)
} catch(err) {
d.reject(err);
}
d.resolve();
return d.promise;
}
// Write a stream to a file
function writeStream(filename, st) {
var d = Q.defer();
var wstream = fs.createWriteStream(filename);
wstream.on('finish', function () {
d.resolve();
});
wstream.on('error', function (err) {
d.reject(err);
});
st.pipe(wstream);
return d.promise;
}
// Find a filename available
@@ -62,7 +84,7 @@ function getUniqueFilename(base) {
}
return filename;
};
}
// List files in a directory
@@ -145,6 +167,6 @@ function cleanFolder(root) {
return d.promise;
});
};
}
module.exports = fsUtils;
+28 -25
View File
@@ -1,46 +1,49 @@
var _ = require("lodash");
var Q = require("q");
var fs = require("fs");
var gm = require("gm");
var fs = require("./fs");
var exec = require('child_process').exec;
var request = require("request");
var links = require("./links");
// Convert a file
var convertFile = function(source, dest, options) {
// Convert a svg file
var convertSVGFile = function(source, dest, options) {
var d = Q.defer();
options = _.defaults(options || {}, {
resize: null
});
var img = gm(source)
.options({
imageMagick: true
});
var command = "svgexport "+source+" "+dest;
if (options.resize) img = img.resize(options.resize.w, options.resize.h);
img.noProfile()
.write(dest, function(err) {
if (!err) return d.resolve();
if (err.code == "ENOENT") {
err = new Error("Need to install 'ImageMagick'");
}
d.reject(err);
});
var child = exec(command, function (error, stdout, stderr) {
if (error) {
if (error.code == "ENOENT") error = new Error("Need to install 'svgexport' using 'npm install svgexport -g'");
return d.reject(error);
}
d.resolve();
});
return d.promise;
};
// Convert a file or url
var convert = function(source, dest, options) {
if (links.isExternal(source)) source = request(source);
// Convert a svg file or url
var convertSVG = function(source, dest, options) {
if (!links.isExternal(source)) return convertSVGFile(source, dest, options);
return convertFile(source, dest, options);
return fs.tmp.file({ postfix: '.svg' })
// Download file
.then(function(tmpfile) {
return fs.writeStream(tmpfile, request(source))
.thenResolve(tmpfile);
})
.then(function(tmpfile) {
return convertSVGFile(tmpfile, dest, options);
});
};
module.exports = {
convert: convert,
convertSVG: convertSVG,
INVALID: [".svg"]
};
+1 -1
View File
@@ -158,7 +158,7 @@ function convertImages(images, options) {
var imgout = path.resolve(options.book.options.output, image.dest);
options.book.log.debug("convert image", image.source, "to", image.dest, "...");
return imgUtils.convert(imgin, imgout)
return imgUtils.convertSVG(imgin, imgout)
.then(function() {
options.book.log.debug.ok();
}, function(err) {
-1
View File
@@ -28,7 +28,6 @@
"crc": "3.2.1",
"bash-color": "0.0.3",
"URIjs": "1.14.1",
"gm": "1.17.0",
"request": "2.51.0"
},
"devDependencies": {