Скриншот div с html2canvas. Отправлено на php, сохранено: Поврежденное изображение


Я генерирую холст и передаю его в php так:

$('body').on('click','#save_image',function(){
                html2canvas($('.myImage'), {
                    onrendered: function(canvas) {
                        //$('.imageHolder').html(canvas);
                            var dataURL = canvas.toDataURL("image/png");

                           // $('.imageHolder').append('<img src="'+dataURL+'" />');
                            $('.imageHolder').html('Generating..');
                            $.post('image.php',{image: dataURL},function(data){
                                $('.imageHolder').html(data);
                            });
                    }
                });
 });

Image.php :

<?
    $image = $_POST['image'];
    echo "<img src='$image' alt='image' />";
    $decoded = str_replace('data:image/png;base64,','',$image);
    $name = time();
    file_put_contents("/home/toni005/public_html/toniweb.us/div2img/" . $name . ".png", $decoded);
    echo '<p><a href="download.php?img='.$name.'.png">Download</a></p>';
?>

Download.php :

    <? $file = $_GET['img'];
header('Content-Description: File Transfer');
header("Content-type: image/jpg");
header("Content-disposition: attachment; filename= ".$file."");
readfile($file);
?>

Дело в том, что изображение генерируется, когда я нажимаю ссылку для загрузки, загрузка загружается, но изображение не может быть открыто (кажется, повреждено)

Чего мне не хватает?

Это можно проверить здесь: http://toniweb.us/div2img/

Author: j0k, 2013-03-30

1 answers

Вероятно, вам следует base64_decode() URL-адрес данных. Это даже сказано в самом URL-адресе: data:image/png;base64,...

$decoded = base64_decode(str_replace('data:image/png;base64,', '', $image));
 7
Author: jwueller, 2013-03-30 17:22:15