将来自 resemble.js 的缓冲区响应写入文件
Writing buffer response from resemble.js to file
我正在使用 node-resemble-js 来比较两个 PNG 图像。
比较没有问题,我得到了 successful/relevant 响应,但是我在输出图像差异时遇到了问题。
var express = require('express');
var fs = require('fs');
var resemble = require('node-resemble-js');
var router = express.Router();
router.get('/compare', function(req, res, next) {
compareImages(res);
});
var compareImages = function (res) {
resemble.outputSettings({
largeImageThreshold: 0
});
var diff = resemble('1.png')
.compareTo('2.png')
.ignoreColors()
.onComplete(function(data){
console.log(data);
var png = data.getDiffImage();
fs.writeFile('diff.png', png.data, null, function (err) {
if (err) {
throw 'error writing file: ' + err;
}
console.log('file written');
});
res.render('compare');
});
};
module.exports = router;
它按预期写入 diff.png,但它没有创建有效图像。
有什么地方出错了吗?感觉我很接近,但不确定最后一块。
谢谢
看起来有一个 pack() 方法需要调用,它会做一些工作然后流化数据。在这种情况下,您可以缓冲流,然后像这样调用 writeFile:
var png = data.getDiffImage();
var buf = new Buffer([])
var strm = png.pack()
strm.on('data', function (dat) {
buf = Buffer.concat([buf, dat])
})
strm.on('end', function() {
fs.writeFile('diff.png', buf, null, function (err) {
if (err) {
throw 'error writing file: ' + err;
}
console.log('file written');
})
})
或者你也可以像这样简单一点:
png.pack().pipe(fs.createWriteStream('diff.png'))
老实说,您的方法对我来说很有意义(抓住 Buffer 并写入它)但我猜 data
Buffer 附加到从 getDiffImage
返回的内容并不是真正的最终 png。似乎文档有点薄,但这里有一些信息:https://github.com/lksv/node-resemble.js/issues/4
我正在使用 node-resemble-js 来比较两个 PNG 图像。
比较没有问题,我得到了 successful/relevant 响应,但是我在输出图像差异时遇到了问题。
var express = require('express');
var fs = require('fs');
var resemble = require('node-resemble-js');
var router = express.Router();
router.get('/compare', function(req, res, next) {
compareImages(res);
});
var compareImages = function (res) {
resemble.outputSettings({
largeImageThreshold: 0
});
var diff = resemble('1.png')
.compareTo('2.png')
.ignoreColors()
.onComplete(function(data){
console.log(data);
var png = data.getDiffImage();
fs.writeFile('diff.png', png.data, null, function (err) {
if (err) {
throw 'error writing file: ' + err;
}
console.log('file written');
});
res.render('compare');
});
};
module.exports = router;
它按预期写入 diff.png,但它没有创建有效图像。
有什么地方出错了吗?感觉我很接近,但不确定最后一块。
谢谢
看起来有一个 pack() 方法需要调用,它会做一些工作然后流化数据。在这种情况下,您可以缓冲流,然后像这样调用 writeFile:
var png = data.getDiffImage();
var buf = new Buffer([])
var strm = png.pack()
strm.on('data', function (dat) {
buf = Buffer.concat([buf, dat])
})
strm.on('end', function() {
fs.writeFile('diff.png', buf, null, function (err) {
if (err) {
throw 'error writing file: ' + err;
}
console.log('file written');
})
})
或者你也可以像这样简单一点:
png.pack().pipe(fs.createWriteStream('diff.png'))
老实说,您的方法对我来说很有意义(抓住 Buffer 并写入它)但我猜 data
Buffer 附加到从 getDiffImage
返回的内容并不是真正的最终 png。似乎文档有点薄,但这里有一些信息:https://github.com/lksv/node-resemble.js/issues/4