gpt4 book ai didi

javascript - 如何使用 php 和 ajax 将 Canvas 元素保存到 png 文件?

转载 作者:行者123 更新时间:2023-11-29 19:44:33 25 4
gpt4 key购买 nike

我想使用 php 和 jquery ajax 将 html canvas 元素保存为图像。这是我的 ajax 代码。

   var  front_image=canvas.toDataURL("image/png");
//front image is a base_64 string
$.ajax({
url:base_url+'tabs/profile/save_front_image',
type:'POST',
data:'front_image='+front_image,
success:function(response){


}
});

我只是在 php 中做 echo echo $_POST['front_image'] 所以请求和响应是一样的。

当我在 ajax 之前使用此代码时,它会将图像加载到浏览器的新选项卡

 var w = window.open('about:blank', 'image from canvas');
w.document.write("<img src='" + frame_image + "' alt='from canvas'/>");

但是当我将与下面相同的代码放在 ajax 响应上时,它不起作用。在浏览器中只会打开一个空白选项卡。所以我无法将图像另存为文件。

var w = window.open('about:blank', 'image from canvas');
w.document.write("<img src='" + response + "' alt='from canvas'/>");

我还比较了 frame_imageresponse 的字符串长度。他们是一样的。我不确定为什么图像没有加载响应。请给我建议答案谢谢。

最佳答案

// soon you can use front_image=canvas.toBlob("image/png")

// construct a blob
function b64toBlob(b64Data, contentType, sliceSize) {
contentType = contentType || '';
sliceSize = sliceSize || 512;

var byteCharacters = atob(b64Data);
var byteArrays = [];

for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);

var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}

var byteArray = new Uint8Array(byteNumbers);

byteArrays.push(byteArray);
}

var blob = new Blob(byteArrays, {type: contentType});
return blob;
}

// make an actually file from the base64 so we can send binary data
var blob = b64toBlob(front_image.split(",")[1], "image/png")
var fd = new FormData();

fd.append("file", blob, "filename.png");

$.ajax({
url: 'http://example.com/script.php',
data: fd,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
alert(data);
}
});

//节省

<?php
$uploads_dir = '/uploads';
foreach ($_FILES["file"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["file"]["tmp_name"][$key];
$name = $_FILES["file"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?>

关于javascript - 如何使用 php 和 ajax 将 Canvas 元素保存到 png 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20682255/

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