我正在使用 node-resemble-js来比较两个PNG图像. 比较发生没有问题,我得到一个成功的/相关的响应,但我输出图像差异时遇到问题. var express = require('express');var fs = require('fs');var resemble = requ
比较发生没有问题,我得到一个成功的/相关的响应,但我输出图像差异时遇到问题.
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并编写它),但我想从getDiffImage返回的数据缓冲区并不是最终的png.好像文档有点薄,但这里有一些信息:https://github.com/lksv/node-resemble.js/issues/4