【问题标题】:Array image to generate image in folder using html2canvas使用 html2canvas 在文件夹中生成图像的数组图像
【发布时间】:2014-01-16 02:00:43
【问题描述】:

我将所有子图像 src 存储在 Array 中,我已经创建了示例模板,并且在数组循环中我正在更改 src,他们希望将它们转换为 image 。但只有最后 4 个数组值保存为图像。这是ajax问题还是什么??

HTML 代码:

<div id="present_sample" style="display:">
<img id="one" src="img/Tulips.jpg" /> 
<img id="two" class="alignright" src="img/Tulips.jpg" /> 
<br/>
<img id="three" src="img/Tulips.jpg" /> 
<img id="four" class="alignright" src="img/Tulips.jpg" /> 

JQuery 代码:

 $('#convert').click(function()
 {
 var images = $('#links a').children('img').map(function(){
 return $(this).attr('src') }).get();
    console.log(images);

    //$('#gallery_pic').append(images);
     var side=1;
      var data;
     for (i = 0; i < images.length; i++) {


        console.log('Top i is '+i);
        console.log('Group*******');
        console.log(i+','+images[i]);
        $('#one').attr("src", images[i++]);
        console.log(i+','+images[i]);
        $('#two').attr("src", images[i++]);
        console.log(i+','+images[i]);
        $('#three').attr("src", images[i++]);
        console.log(i+','+images[i]);
        $('#four').attr("src", images[i]);
        console.log('Group Ends');
        html2canvas([document.getElementById('present_sample')], {
    onrendered: function (canvas) {
        $('canvas').html(canvas);
        var data = canvas.toDataURL('image/png');
        // AJAX call to send `data` to a PHP file that creates an image from the dataURI string and saves it to a directory on the server

        $.ajax({
          type: "POST",
          url: 'download.php',
          data: {
          image: data},
           success:function(data)   { 
          alert('Ajax return is'+data); 

            }
            });

        }

       });

});

PHP 代码:

<?php 
if ( isset($_POST["image"]) && !empty($_POST["image"]) ) { 

    // get the image data
    $data = $_POST['image'];

    list($type, $data) = explode(';', $data);
    list(, $data)      = explode(',', $data);
    $data = base64_decode($data);

    //Image name
    //$filename ="image". md5(uniqid()) . '.png';
    $filename ="image". md5(uniqid()) . '.jpg';

    $file = "download/".$filename;

  // decode the image data and save it to file
    file_put_contents($file,$data);

    echo "successfully downloaded in folder";


}
?>  

【问题讨论】:

  • 为什么要声明两次可变数据?

标签: javascript php jquery arrays html2canvas


【解决方案1】:

您可以通过仅使用one ajax request 很好地避免该问题,即,在for 循环结束后进行ajax 调用,然后将所有数据附加到您的data 变量,并在结束时循环,只打一个ajax 电话。

注意:for 循环内的ajax 调用的这个问题已经在许多线程中讨论过,看看它是否有帮助:

http://www.ravenglass.com/blog/index.cfm/2013/3/5/FOR-Loops-Overwriting-Ajax-Responses-and-how-to-fix

Ajax call within jquery each loop

jQuery AJAX solution inside each() loop

【讨论】:

  • 如果我只是删除 ajax 并通过在图像 src 中设置来检查数据,则会创建 2 个图像,但两者都是相同的。我不明白为什么前 4 张图片被最后一张重叠了
  • 您的意思是创建了 2 组 4 张图像,但两组相同?
  • var 数据的两个声明呢?你删除了一个?
  • 你的 for 循环迭代了两次? images.length 的值是多少?你能发布链接的代码吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2016-01-20
  • 2023-03-25
  • 2015-03-17
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
相关资源
最近更新 更多