2017-07-14 61 views
0

我有一個節點紅色流,其中我從REST API獲取一些圖像作爲png或jpg格式的二進制緩衝區。如何在節點紅色流中調整圖像大小

動機:有些人不會關注併發布非常大的圖片到博客服務。由於該服務的存儲量有限,因此我希望傾聽事件流,並將每個傳入圖片的大小調整爲「最長邊= 1024」,同時保持縱橫比不變。

現在我有二進制對象作爲緩衝區在我的流 - 但如何調整圖像在節點紅色流?我搜索了半天,但沒有找到能夠做到這一點的節點。有任何想法嗎?

回答

0

我結束了通過添加條目「服從跳」使服從跳提供公開:在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 ; 

這樣我就解決了我的需求。更好的想法歡迎。

0

我不認爲現在有一個Node-RED節點會爲你做。您可能必須編寫自己的Node-RED節點,並且有關於如何開始使用Node-RED doc站點here的說明。

在npm上有一堆ImageMagick節點,這可能是一個很好的起點,或者sharp模塊看起來是另一個好的候選者。

+0

我發現了這個,並會試一試。稍後在此處報告。 https://flows.nodered.org/node/node-red-contrib-viseo-jimp –