我有一個節點紅色流,其中我從REST API獲取一些圖像作爲png或jpg格式的二進制緩衝區。如何在節點紅色流中調整圖像大小
動機:有些人不會關注併發布非常大的圖片到博客服務。由於該服務的存儲量有限,因此我希望傾聽事件流,並將每個傳入圖片的大小調整爲「最長邊= 1024」,同時保持縱橫比不變。
現在我有二進制對象作爲緩衝區在我的流 - 但如何調整圖像在節點紅色流?我搜索了半天,但沒有找到能夠做到這一點的節點。有任何想法嗎?
我有一個節點紅色流,其中我從REST API獲取一些圖像作爲png或jpg格式的二進制緩衝區。如何在節點紅色流中調整圖像大小
動機:有些人不會關注併發布非常大的圖片到博客服務。由於該服務的存儲量有限,因此我希望傾聽事件流,並將每個傳入圖片的大小調整爲「最長邊= 1024」,同時保持縱橫比不變。
現在我有二進制對象作爲緩衝區在我的流 - 但如何調整圖像在節點紅色流?我搜索了半天,但沒有找到能夠做到這一點的節點。有任何想法嗎?
我結束了通過添加條目「服從跳」使服從跳提供公開:在settings.js「0.2.X」,給的package.json依賴和添加到functionGlobalContext:
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 ;
這樣我就解決了我的需求。更好的想法歡迎。
我不認爲現在有一個Node-RED節點會爲你做。您可能必須編寫自己的Node-RED節點,並且有關於如何開始使用Node-RED doc站點here的說明。
在npm上有一堆ImageMagick節點,這可能是一個很好的起點,或者sharp模塊看起來是另一個好的候選者。
我發現了這個,並會試一試。稍後在此處報告。 https://flows.nodered.org/node/node-red-contrib-viseo-jimp –