我有一個節點服務器,而不是存儲裁剪圖像,我想裁剪它們以響應AJAX調用,並將它們發送到客戶端。我正在存儲要裁剪的內容以及如何在餅乾和身體中裁切它的信息。在服務器上裁剪,用base64編碼,然後發回給用戶。這裏是我的代碼看起來像從圖形魔術管道圖像輸出到沒有base64編碼的響應
res.set('Content-Type', 'image/jpeg');
gm(request(body.URL))
.crop(req.cookies[name+"Width"],req.cookies[name+"Height"],req.cookies[name+"X"],req.cookies[name+"Y"])
.stream(function streamOut (err, stdout, stderr) {
if (err) return next(err);
stdout.pipe(base64encode()).pipe(res);
stdout.on('error', next);
});
這工作,但我不喜歡它。我只能通過在base64中對其進行編碼才能使其工作,但在客戶端,這似乎很難將其解碼爲圖像。我寧願直接發送圖像,但我無法得到這個工作。在不對其進行解碼的情況下裁剪圖像會導致服務器產生亂碼響應。有一個更好的方法嗎?或者未保存的圖像必須進行編碼才能發送?
您是否試過'.setFormat('jpg' )'.crop()'之前'? –
setFormat('jpg')導致了與我以前相同的亂碼。我不熟悉fs.createWriteStream,你能告訴我在代碼中看起來如何嗎? – master565