我有一个节点服务器,我不想存储裁剪的图像,而是想要在响应AJAX调用时裁剪它们,然后将它们发送到客户端。我存储了裁剪什么以及如何在饼干和身体中裁剪的信息。在服务器上我裁剪它,在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中对其进行编码来实现此功能,但在客户端,将此解码为图像似乎很慢。我宁愿直接发送图片,但我无法让它工作。在不解码图像的情况下剥离图像会导致服务器发出错误的响应。有一个更好的方法吗?或者未保存的图像是否必须进行编码才能发送?
答案 0 :(得分:2)
我不知道你是怎么写的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方面并仅为您的图片使用静态src
引用node
脚本?正如我所说,我不知道node
和Javascript
,但如果我通过PHP脚本生成缩略图,我会将其添加到HTML中
<img src="/php/thumb.php"/>
这样只需调用PHP脚本即可生成图像。如果您删除/php/thumb.php
并将其替换为您已将上面建议的node
脚本命名为,则应该告诉您问题是AJAX还是GraphicsMagick
方面...... < / p>