将graphics魔术输出的图像转换为无base64编码的响应

我有一个节点服务器,而不是存储裁剪图像,我想裁剪他们回应一个AJAX调用,并发送到客户端的方式。 我正在存储什么裁剪的信息,以及如何裁剪cookies和身体。 在服务器上裁剪,用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中编码来实现这个function,但在客户端,这似乎是很慢的解码这个图像。 我宁愿直接发送图像,但我无法得到这个工作。 在不对其进行解码的情况下翻页,导致服务器产生乱码响应。 有一个更好的方法吗? 还是未保存的图像必须编码才能发送?

       

网上收集的解决方案 "将graphics魔术输出的图像转换为无base64编码的响应"

我不知道你是如何编写node.js – 这一切看起来像一堆点和圆括号,但使用我所了解的GraphicsMagick命令行,我尝试了这一点,它做我认为你想要的 – 这是在stdout上写入一个JPEG编码的结果:

 // Send header "Content-type: image/jpeg"... var gm = require('gm'); var input = 'input.jpg'; gm(input).resize(350).toBuffer('JPG',function (err, buffer) { if (err) return handle(err); process.stdout.write(buffer); }) 

更新

您是否考虑过排除AJAX方面的问题,并且只使用引用node脚本的映像的静态src ? 正如我所说,我不知道nodeJavascript但如果我通过PHP脚本生成缩略图,我会将此添加到HTML

 <img src="/php/thumb.php"/> 

所以只需调用一个PHP脚本来生成一个图像。 如果你删除了/php/thumb.php并replace了那个,但是你已经命名了我上面build议的node脚本,它应该告诉你问题是AJAX还是GraphicsMagick方面的问题…