При разработке одного сервиса я столкнулся с необходимостью дать возможность пользователям сообщать об ошибках. Проблема заключалась в том, чтобы пользователь мог сделать скриншот без использования стороннего софта или сервиса.
Сначала эта задача показалась мне невыполнимой, но я нашел html2canvas.
Скачать, посмотреть примеры и почитать подробнее можно тут. Вкратце: эта штука умеет создавать скриншот страницы в элементе canvas, а оформлена в виде jquery плагина.
К примеру вешаем на что-нибудь клик:
в файле saveCPic.php все просто:
В результате этих нехитрых манипуляций по клику на сервере создается файл со скриншотом текущей страницы.
Эта статья не претендует на глобальное решение какой-либо задачи, но возможно она натолкнет кого-нибудь на интересные мысли или решит какую-нибудь проблему.
Сначала эта задача показалась мне невыполнимой, но я нашел html2canvas.
Скачать, посмотреть примеры и почитать подробнее можно тут. Вкратце: эта штука умеет создавать скриншот страницы в элементе canvas, а оформлена в виде jquery плагина.
К примеру вешаем на что-нибудь клик:
$(document).ready(function() {
$('#megaButton').live('click',function(){
//собственно включение самого html2canvas
$('body').html2canvas();
setTimeout("makeIT()", 1000)
});
});
function makeIT()
{
//если на странице только один canvas, то можно так:
var canvas = $('canvas')[0];
//получаем картинку в base64
var data = canvas.toDataURL('image/png').replace(/data:image\/png;base64,/, '');
//все возникшие проблемы решились удалением canvas
$('canvas').remove();
//засылаем картинку на сервер
$.post('saveCPic.php',{data:data}, function(rep){
alert('Изображение '+rep+' сохранено' );
});
}
в файле saveCPic.php все просто:
<?php
//создаем какое-то имя, ну, например:
$name = time().'.png';
//записываем, не забывая перекодировать из base64
file_put_contents($name, base64_decode($_POST['data'] ));
//отдаем обратно имя созданного файла
echo( $name );
?>
В результате этих нехитрых манипуляций по клику на сервере создается файл со скриншотом текущей страницы.
Эта статья не претендует на глобальное решение какой-либо задачи, но возможно она натолкнет кого-нибудь на интересные мысли или решит какую-нибудь проблему.