У меня есть сервер Node, где вместо хранения обрезанных изображений я хочу обрезать их в ответ на вызов AJAX и отправить их клиенту таким образом. Я храню информацию о том, что урожай и как обрезать его в куки и тело. На сервере я обрезаю его, закодирую его в base64 и отправьте обратно пользователю. Вот как выглядит мой код:Изображение изображения на выходе из Graphics Magic для ответа без кодировки 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') 'before' .crop()'? –
setFormat ('jpg') привел к той же тарабарщине, что и раньше. Я не знаком с fs.createWriteStream, вы можете показать мне, как это будет выглядеть в моем коде? – master565