我利用AWS Lambda example script來使用Node.js和ImageMagick/GraphicsMagick庫調整JPG圖像的大小。我想做一個簡單的修改,在調整大小後將圖像從JPG轉換爲WebP格式。 (GraphicsMagick不支持WebP,但ImageMagick支持,它在腳本中被分類)。根據緩衝區部分here(將JPG轉換爲PNG)中的示例,可以使用以下代碼塊。使用Node.js中的GraphicsMagick/ImageMagick包在AWS Lambda中將JPG轉換爲WebP
gm('img.jpg')
.resize(100, 100)
.toBuffer('PNG',function (err, buffer) {
if (err) return handle(err);
console.log('done!');
})
當我在我的本地Node.js安裝(用WebP替換PNG)中運行該代碼塊時,它可以工作。
當我修改變換AWS LAMBDA example script的函數(見下文),但是,並執行它在AWS,收到以下「流產生空緩衝器」錯誤:
Unable to resize mybucket/104A0378.jpg and upload to mybucket_resized/resized-104A0378.jpg due to an error: Error: Stream yields empty buffer
改性變換()函數(參見與「WEBP」線):
function tranform(response, next) {
gm(response.Body).size(function(err, size) {
// Infer the scaling factor to avoid stretching the image unnaturally.
var scalingFactor = Math.min(
MAX_WIDTH/size.width,
MAX_HEIGHT/size.height
);
var width = scalingFactor * size.width;
var height = scalingFactor * size.height;
// Transform the image buffer in memory.
this.resize(width, height)
.toBuffer('webp', function(err, buffer) {
if (err) {
next(err);
} else {
next(null, response.ContentType, buffer);
}
});
});
}
我意識到response.ContentType仍然等於圖像/ JPEG,但我不認爲這是在這裏發揮作用。另外,我意識到我應該在調整大小之前轉換爲WebP,但......嬰兒步驟!
任何想法?