dsc*_*chu 4 php ajax jquery html2canvas
我正在使用html2canvas 0.4.0渲染截图,并希望将其保存为我的网络服务器上的图像.
为此,我编写了以下函数:
function screenShot(id) {
html2canvas(id, {
proxy: "https://html2canvas.appspot.com/query",
onrendered: function(canvas) {
$('body').append(canvas); // This works perfect...
var img = canvas.toDataURL("image/png");
var output = img.replace(/^data:image\/(png|jpg);base64,/, "");
var Parameters = "image=" + output + "&filedir=" + cur_path;
$.ajax({
type: "POST",
url: "inc/saveJPG.php",
data: Parameters,
success : function(data)
{
console.log(data);
}
}).done(function() {
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
<?php
$image = $_POST['image'];
$filedir = $_POST['filedir'];
$name = time();
$decoded = base64_decode($image);
file_put_contents($filedir . "/" . $name . ".png", $decoded, LOCK_EX);
echo $name;
?>
Run Code Online (Sandbox Code Playgroud)
渲染画布后,我可以完美地将其附加到HTML正文,但将其保存在我的服务器上会导致损坏的(?)文件.
我可以在IrvanView中读取尺寸,但图像是透明的/空的吗?该文件大约2.076 KB.所以它并不是空洞的.
我也尝试使用JPEG,它会导致文件损坏,而IrfanView会说"虚假标记长度".
屏幕截图的尺寸为650x9633.POST方法的数据是多少?
dsc*_*chu 15
如果有人遇到同样的问题,这就是我解决它的方法:
问题取决于这样一个事实,即+URL被%20大多数服务器解释为编码空间(如).所以我需要先对数据进行编码,然后将其发送POST到我指定的PHP函数.
这是我的代码:
function screenShot(id) {
html2canvas(id, {
proxy: "https://html2canvas.appspot.com/query",
onrendered: function(canvas) {
var img = canvas.toDataURL("image/png");
var output = encodeURIComponent(img);
var Parameters = "image=" + output + "&filedir=" + cur_path;
$.ajax({
type: "POST",
url: "inc/savePNG.php",
data: Parameters,
success : function(data)
{
console.log("screenshot done");
}
}).done(function() {
//$('body').html(data);
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
<?php
$image = $_POST['image'];
$filedir = $_POST['filedir'];
$name = time();
$image = str_replace('data:image/png;base64,', '', $image);
$decoded = base64_decode($image);
file_put_contents($filedir . "/" . $name . ".png", $decoded, LOCK_EX);
echo $image;
?>
Run Code Online (Sandbox Code Playgroud)
干杯!