Fabric.js从JSON加载画布后在Node服务器上创建图像
Fabric.js create image on Node server after loading canvas from JSON
过去几天我一直在绞尽脑汁想弄清楚这一点。在我正在编写的应用程序中,用户可以上传两张图像,一张覆盖另一张。将一个图像放在另一个图像的顶部后,他们单击一个按钮,画布将转换为JSON并发送到节点(express)服务器。然后,通过将JSON数据加载到画布,调用倍数为2的toDataURL并将数据写入png文件,重新创建画布。
router.post('/', function(req, res) {
var canvas = fabric.createCanvasForNode(600, 600);
canvas.loadFromJSON(req.body, function() {
var dataUrl = canvas.toDataURL({
format: 'png',
multiplier: 2
});
imageSrc = dataUrl.replace(/^data:image'/png;base64,/, "");
fs.writeFile('hello.png', imageSrc, 'base64', function(err) {
console.log('Error: ' + err);
});
});
如果我不使用乘数(即乘数为1),就会创建一个600x600px的图像,正如预期的那样。但是,当我将乘数设置为2时,为了获得更高分辨率的图像,只有生成的图像的右上四分之一包含从画布创建的图像。
截断的PNG图像
我在网上找到了一些资源,说这是以前版本的fabric中的一个问题,我也看到了其他人的解决方案,但似乎没有什么能解决我的问题。如有任何帮助、建议或资源,我们将不胜感激!
编辑也许我应该包括一个如何将JSON画布传递到服务器的示例:
var json = JSON.stringify(canvas);
var http = new XMLHttpRequest();
var url = '/designer';
http.open('POST', url, true);
http.setRequestHeader('Content-type', 'application/json');
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
};
http.send(json);
对于其他人的参考,我添加了以下两行:
var ctx = canvas.getContext('2d');
ctx.scale(2,2);
此外,我还将尺寸更改为我希望最终图像为的任何尺寸(在我的情况下为1200x1200)。
相关文章:
- 使用node.js服务器中的evernote api获取note内容
- 什么's本地node.js服务器和python简单http服务器之间的区别
- renderReact/Rect Router+Node/Express.js的服务器端/同构渲染中未定义renderP
- 在HTML页面上显示node.js服务器中的数据
- 当我通过Node服务器提供HTML时,为什么我的页面Javascript不起作用
- HTTPRequest to Node 服务器适用于 IE 8,但不适用于 IE 7
- 使用 AJAX 发布到 Node 服务器
- 在我的Node服务器上收到http发布请求时执行脚本
- 使用Node服务器发送javascript文件
- 用于angularjs网站的带有json RPC的Node服务器
- Node服务器只返回index.html,不加载bundle.js或其他js文件
- 运行Node服务器接管整个服务器,使其他项目目录无法访问,即使使用Node -http-proxy
- 使用webhooks将Github版本部署到Node服务器
- 通过https nginx网站将http发送到Node服务器
- 如何在没有Node服务器的情况下运行AngularJS2应用
- Node服务器请求.session始终为空,使用Passport-local策略
- 如何使用Meteor JS Node服务器代理第三方ajax请求
- 两个Node服务器可以同时运行并交互吗,这样其中一个服务器就是为客户端服务的中介
- Fabric.js从JSON加载画布后在Node服务器上创建图像
- jQuery表单提交给远程Node服务器API