将画布转换为图像并将图像上传到服务器

时间:2016-06-14 作者:Francesco Isgrò

我正在一个wordpress网站上为一个大学项目写一篇关于涂黑诗歌的文章,在那里用户可以涂黑部分文本来创作一首诗。

在用户创作完他的诗歌后,我们需要让他能够将用户生成的内容上传到我们的服务器,这样我们在检查并批准内容后,就可以将其发布在网站的主“墙上”。

这是我的第一个web开发项目,我已经阅读了大量相关教程(字面上,每一个都是……),虽然我的html/javascript/jQuery技能正在提高,但PHP和ajax调用(这似乎是这种工作所必需的)仍然远远超出我的能力范围,我没有时间好好学习它们,因为最后期限还有两周。

教程和答案如下thisthis 建议首先使用html2canvas(我成功地做到了这一点)获取段落的修改内容,然后使用表单或对PHP函数的AJAX调用将base64编码的PNG上传到服务器,在服务器上解码并保存到/wp content/uploads。不幸的是,他们没有讨论如何在wordpress中处理事情,我可能遗漏了一些非常明显的东西。

我试着从this 文章,看看它是否在我的wordpress站点中起作用(以便我可以修改):我将PHP函数放在我使用的主题文件夹中,但即使当我按下上传按钮时弹出成功上传的消息,也不会发生任何事情。我应该在函数中添加一些内容吗。还有php?

这是我目前的代码:

HTML

<div id="target"> // the text that the user interacts with
<p>Lorem ipsum......</p> 
</div>
<br/>
<h3>Preview:</h3>
<div id="previewImage"> // where the preview of the image is displayed
</div>

<input id="Preview-Image" type="button" value="Preview"/>
<a id="download-btn" href="#">
Download
</a>
脚本:

<script>
$(document).ready(function(){





var element = $("#target");
var getCanvas;

$("#Preview-Image").on(\'click\', function () {
     html2canvas(element, {
     onrendered: function (canvas) {
            $("#previewImage").append(canvas);
            getCanvas = canvas;
         }
     });
});

$("#download-btn").on(\'click\', function () {
var imgData = getCanvas.toDataURL("image/png");

// this bit lets the user download the PNG file

var newData = imgData.replace(/^data:image\\/png/, "data:application/octet-stream");
$("#btn-Convert-Html2Image").attr("download", "your_pic_name.jpg").attr("href", newData);
});
});

在这一点上,根据我所读的内容,我应该包括这样一个AJAX调用:

$.ajax({
url: \'/wp-admin/admin-ajax.php\',
dataType: \'json\',
method: \'post\',
data: {action:\'save_poem\',img:\'your-image-data-etc\'},
success: function(response){ //server success response },
error: function(err){ //server error response }
})
。。。并在主题功能中包含save\\u诗歌。php:

function save_poem_image(){
//code to process and save image
}
add_action("wp_ajax_save_poem", "save_poem_image");
add_action("wp_ajax_nopriv_save_poem", "save_poem_image");
现在,我的问题是:以上步骤正确吗?我应该在save\\u poem中放入什么来代替“/”代码来处理和保存图像?应该是PHP代码来解码和保存图像吗?否则,有没有更简单的方法来实现我的想法?

提前感谢!

1 个回复
SO网友:Mark Kaplun

由于您发送的文件是base64编码的,因此需要解码结果并将其保存到临时目录下的文件中。从这里开始,它只是一个普通的服务器端wordpress图像操作,并将相关信息插入数据库,这在这个网站上有很多例子。

您可能应该在AJAX响应中返回生成图像的URL,但这取决于需要显示的结果