将'canvas'图像数据上传到服务器

use*_*318 38 html javascript canvas

我需要在画布上的图像数据上传到服务器(数据库)上的苍蝇,也就是,我需要创建一个表单,并与输入=文件,无需任何用户交互后的图像数据.

Jay*_*esh 35

FWIW,这就是我的工作方式.

我的服务器位于谷歌应用引擎中.我使用jQuery.post将canvas.toDataURL()的输出作为post请求的一部分发送.数据URL是base64编码的图像数据.所以在服务器上我解码它并将其转换为图像

import re 
import base64
class TnUploadHandler(webapp.RequestHandler):
    dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
    def post(self):
        uid = self.request.get('uid')
        img = self.request.get('img')

        imgb64 = self.dataUrlPattern.match(img).group(2)
        if imgb64 is not None and len(imgb64) > 0:
            thumbnail = Thumbnail(
                    uid = uid, img = db.Blob(base64.b64decode(imgb64)))
            thumbnail.put()
Run Code Online (Sandbox Code Playgroud)

从客户端我发送如下数据:

$.post('/upload',
        {
            uid : uid,
            img : canvas.toDataURL('image/jpeg')
        },
        function(data) {});
Run Code Online (Sandbox Code Playgroud)

这可能不是最好的方法,但它确实有效.


Fab*_*ger 11

您不需要文件输入,只需获取数据ctx.getImageData()并使用Ajax将其发布到服务器.

请参阅MDN文档CanvasRenderingContext2D.getImageData().

但即使使用,您也无法在IE中获取图像数据ExCanvas.

  • 链接404s,这就是指南声明您应该在答案中包含代码的原因,而不仅仅是链接. (7认同)
  • 可以在IE上使用fxCanvas(不使用ExCanvas).您需要使用fURction toDataURL("image/png",function(fxUrl){...}). (3认同)

Fir*_*rze 6

这是我解决这个问题的方法.使用JavaScript将图像作为base64数组发布,然后使用PHP解码并将其保存为图像.

客户端(JavaScript):

$.post('/ajax/uploadthumbnail',
    {
        id : id,
        img : canvas.toDataURL("image/png")
    }, function(data) {
        console.log(data);
    });
Run Code Online (Sandbox Code Playgroud)

服务器端(PHP):

$img = $_POST['img'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = $_SERVER['DOCUMENT_ROOT'] . '/images/some_name.png';
file_put_contents($file, $data);
Run Code Online (Sandbox Code Playgroud)