gpt4 book ai didi

canvas.toDataURL() 用于大 Canvas

转载 作者:行者123 更新时间:2023-12-04 04:55:20 33 4
gpt4 key购买 nike

我有问题 .toDataURL()用于大 Canvas 。我想转告 base64并在 php 文件上解码,但如果我有一个大 Canvas ,strDataURI变量为空。

我的代码:

var strDataURI = canvas.toDataURL();
strDataURI = strDataURI.substr(22, strDataURI.length);
$.post("save.php",
{
str: strDataURI
};
.toDataURL()有什么替代品吗?或某种方式来改变大小限制?

谢谢。

最佳答案

我不确定 Canvas 尺寸是否有限制,但数据 url 有限制,具体取决于浏览器:Data URL size limitations .
您可以尝试使用 Node.js + node-canvas(服务器端)来重新创建 Canvas 。我一直在使用这些从 Canvas 元素创建可打印图像,到目前为止使用 toDataURL 没有任何问题/限制。
你在使用fabric.js 库吗?我注意到你也在他们的论坛上发帖。
Fabric.js 可以在 Node.js 中使用,并且有一个 toDataURLWithMultiplier方法,它缩放 Canvas /上下文,允许您更改 dataurl 图像大小。您可以检查方法源以了解这是如何完成的。
编辑:
由于您使用的是 fabric.js,我建议使用 Node.js 来处理 Canvas 到服务器上的图像处理。您将找到有关如何在 Node.js 上使用 fabric.js 的更多信息 here .
这是一个使用 Node.js 和 express 的简单服务器:

var express = require('express'),
fs = require('fs'),
fabric = require('fabric').fabric,
app = express(),
port = 3000;

var allowCrossDomain = function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'POST, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
}

app.configure(function() {
app.use(express.bodyParser());
app.use(allowCrossDomain);
});

app.options('/', function(req, res) {
res.send(200);
});

app.post('/', function(req, res) {
var canvas = fabric.createCanvasForNode(req.body.width, req.body.height);

console.log('> Loading JSON ...');
canvas.loadFromJSON(req.body.json, function() {
canvas.renderAll();

console.log('> Getting PNG data ... (this can take a while)');
var dataUrl = canvas.toDataURLWithMultiplier('png', req.body.multiplier),
data = dataUrl.replace(/^data:image\/png;base64,/, '');

console.log('> Saving PNG to file ...');
var filePath = __dirname + '/test.png';
fs.writeFile(filePath, data, 'base64', function(err) {
if (err) {
console.log('! Error saving PNG: ' + err);
res.json(200, { error: 'Error saving PNG: ' + err });
} else {
console.log('> PNG file saved to: ' + filePath);
res.json(200, { success: 'PNG file saved to: ' + filePath });
}
});
});
});

app.listen(port);
console.log('> Server listening on port ' + port);
当服务器运行时,您可以向它发送数据( postData )。
服务器期望 json , widthheight重新创建 Canvas 和 multiplier缩放数据 url 图像。客户端代码如下所示:
var postData = {
json: canvas.toJSON(),
width: canvas.getWidth(),
height: canvas.getHeight(),
multiplier: 2
};

$.ajax({
url: 'http://localhost:3000',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(postData),
dataType: 'json',
success: function(data) {
console.log(data);
},
error: function(err) {
console.log(err);
}
});

关于canvas.toDataURL() 用于大 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156402/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com