【问题标题】:Email an image created on HTML5 canvas通过电子邮件发送在 HTML5 画布上创建的图像
【发布时间】:2011-09-03 07:11:36
【问题描述】:

我有一个画布,用户可以与之交互以更改设计。现在,在用户完成更改后,他可以提交他的设计以及他的电子邮件 ID。但是要提交设计,我将使用http://www.nihilogic.dk/labs/canvas2image/ 将画布转换为图像

现在我想将此图像连同用户的电子邮件 ID 一起发送。如何在不让用户将其保存在本地系统上的情况下直接发送此图像。

【问题讨论】:

    标签: php javascript jquery html canvas


    【解决方案1】:
     if(!empty($_POST['email'])){
        $email=$_POST['email'];
        $image=$_POST['legoImage'];
        $headers="From:".$email."\r\n";
        $headers .= "MIME-Version: 1.0\r\n"; 
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
        list($settings, $encoded_string) = explode(',', $image);
        list($img_type, $encoding_method) = explode(';', substr($settings, 5));
    
        if($encoding_method == 'base64'){
           $file=fopen("images/newLego.png",'w+');
           fwrite($file,base64_decode($encoded_string)) ;
           fclose($file);
        }
        $my_file = "newLego.png";
        $my_path = "images/";
        $my_subject = "My Design";
        $my_message = "Designed by ".$email;
        mail_attachment($my_file, $my_path, "myemail@gmail.com", $email, $email, $email, $my_subject, $my_message);        
    }
    

    我拿起了mail_attachment() 函数here

    【讨论】:

      【解决方案2】:

      我认为您需要一些 javascript 魔法,并且因为您已经使用 HTML5 画布,所以这应该不是问题。

      因此,提交按钮上的 onclick 事件将向您的后端 php 邮件脚本发出 ajax 请求。

      var strDataURI = oCanvas.toDataURL();  
      // returns "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt..."
      

      您只需将 strDataURI 作为参数传递。 现在,我认为您还应该将这些保存在您的数据库中,这样电子邮件中就可以包含这个图像标签:

      <img src="http://www.yourdomain.com/generate_image.php?id=2" alt="Design #2" />
      

      generate_image.php 脚本会做这样的事情

      <?php
      
      header('Cache-control: max-age=2592000');
      header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 2592000));
      
      // connect to db here .. 
      // $id = (int)$_GET['id']; "SELECT youtable WHERE id = '{$id}'"
      // and the $image variable should contain "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt..."
      
      list($settings, $encoded_string) = explode(',', $image);
      list($img_type, $encoding_method) = explode(';', substr($settings, 5))
      
      header("Content-type: {$img_type}");
      
      if($encoding_method == 'base64')
          die(base64_decode($encoded_string)); // stop script execution and print out the image
      
      else { // use another decoding method
      }
      

      【讨论】:

      • @highstrike ...不幸的是,图像是在客户端创建的,我想将它传送到服务器端。它不在我的服务器上
      • 是的,我知道,这就是为什么您必须在提交按钮上发出 ajax 请求,以便您将“data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt...”从客户端传递到您的服务器。将 jQuery 用于 ajax 或其他库
      • 抱歉回复晚了。这帮助我在服务器上生成了图像,但在将新图像转发到目的地时仍然遇到一些问题!!完成后我会发布完整的代码。
      【解决方案3】:

      假设您已使用您发布的教程成功创建了画布的图像文件,您可以使用 PEAR 的 Mail_Mime 之类的库向您的电子邮件添加附件。

      您可以参考this question 以获取使用 Mail_Mime 的示例。

      【讨论】:

      • 问题是;如何将图像获取到服务器。据我所知,它仍然在客户端。
      • @berry 是的。我的问题在于将该图像发送到服务器而不让用户处理它。
      猜你喜欢
      • 1970-01-01
      • 2014-10-18
      • 2018-09-20
      • 2017-09-11
      • 1970-01-01
      • 2012-04-24
      • 2016-07-23
      • 1970-01-01
      • 2011-08-20
      相关资源
      最近更新 更多