有一个叫github的包
pngjs-draw
将基本体绘制到PNG上的。这正是我需要的,但我希望它能与其他使用promises的异步代码一起运行。我试图这样做,遇到了一些我不明白的关于“这个”。pngjs从github中绘制示例代码如下所示…
var fs = require('fs');
var drawing = require('pngjs-draw');
var png = drawing(require('pngjs').PNG);
fs.createReadStream("blue.png")
.pipe(new png({ filterType: 4 }))
.on('parsed', function() {
// Draws a pixel with transparent green
this.drawPixel(150,200, this.colors.black())
// more examples snipped
// Writes file
this.pack().pipe(fs.createWriteStream('blue.out.png'));
});
它在“parsed”函数中使用“this”,并且
this
似乎是一个拥有所有绘画方法的例子。
我想做一个更通用的版本,除了返回一个承诺,处理错误,等等。但似乎我不能用同样的方式来创造承诺。这是我的尝试…
function drawOnPNG(fileIn, fileOut, drawFunction) {
return new Promise((resolve, reject) => {
fs.createReadStream(fileIn).pipe(new png({ filterType: 4 })).on('parsed', () => {
drawFunction(this); // <--MY PROBLEM, I THINK
this.pack().pipe(fs.createWriteStream(fileOut)).on('finish', () => resolve()).on('error', error => reject(error));
}).on('error', error => reject(error));
});
}
我想这样的绘图功能会很方便…
function someDrawFunction(pngThing) {
pngThing.drawPixel(150,200, this.colors.black());
}
然后我可以这样画…
drawOnPNG('fileIn.png', 'fileOut.png', someDrawFunction).then(...
但是,当这个执行时,pngthing并不是我所希望的。用调试器检查它,它是一个很大的对象,上面似乎定义了所有的js类。你能建议一种方法来访问允诺创建中的绘图对象吗?