我有一个节点红色流,我从 REST API 获取一些图像作为 png 或 jpg 格式的二进制缓冲区。
动机:有些人不注意并将非常大的图片发布到博客服务。由于该服务的图片存储量有限,我想收听事件流并将每个传入图片的大小调整为“最长边 = 1024”,同时保持原来的纵横比。
现在我将二进制对象作为流中的缓冲区 - 但是如何在节点红色流中调整图像大小?我确实搜索了半天,但没有找到能够做到这一点的节点。有任何想法吗?
我最终通过将条目“jimp”:“0.2.x”添加到 package.json 依赖项并添加到 settings.js 中的 functionGlobalContext 来使 jimp 公开可用:
functionGlobalContext: {
mcrypto:require('crypto'),
Jimp:require('jimp')
},
现在我可以通过简单地编写在函数节点中轻松使用它:
var JIMP = global.get("Jimp");
msg.image2 = {};
JIMP.read(msg.payload).then(function(image) {
msg.image.width = image.bitmap.width;
msg.image.height = image.bitmap.height;
if (image.bitmap.height > image.bitmap.width){
if (image.bitmap.height > 800){
image.resize(JIMP.AUTO, 800)
msg.image2.width = image.bitmap.width;
msg.image2.height = image.bitmap.height;
image.getBuffer(image.getMIME(), onBuffer);
}
}
else {
if (image.bitmap.width > 800){
image.resize(800, JIMP.AUTO)
msg.image2.width = image.bitmap.width;
msg.image2.height = image.bitmap.height;
image.getBuffer(image.getMIME(), onBuffer);
}
}
}).catch(function (err) {
// handle an exception
if (err) throw err;
});
function onBuffer (err, buffer) {
if (err) throw err;
msg.payload = buffer;
node.send(msg);
}
return ;
这样我就解决了我的需要。欢迎更好的想法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句