Screenshot определенной части экрана средствами javascript
Здравствуйте, уважаемые. Стоит такая задача: Превратить содержимое div-блока в картинку и предложить пользователю скачать её.
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
div {
width:200px;
background-color: green;
}
</style>
<script type="text/javascript" src="http://night-creature.com/html2canvas.js"></script>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
</head>
<body>
<div id="downimg">
<div>
some text
</div>
</div>
<script language="javascript">
function downimg(){
html2canvas($('#downimg'), {
onrendered: function (canvas) {
var img = canvas.toDataURL('image/png').replace("image/png", "image/octet-stream");
window.location.href = img;
}
});
}
</script>
<a href="javascript:void(0)" onClick="downimg()" >SAVE</a>
</body>
</html>
такто работает, но сохраняет без расширения.Приходиться руками писать png? что не есть хорошо. Нашол решения на сайте http://updates.html5rocks.com/2011/0...he-client-side но по англиске не понимаю, да и вобще не понял что там к чему. Хотелось бы чтоб как у ни в демо http://eligrey.com/demos/FileSaver.js/ Кто знает как это сделать:help: |
Ух ты! Не знал что такое можно провернуть в Firefox.
Подключай либы FileSaver.js и canvas-toBlob.js. Когда нужно сохранить содержимое холста, вызывай:
canvas.toBlob(function(blob) {
saveAs(blob ,"blabla.png");
}, "image/png");
|
А причем тут jQuery?
|
Цитата:
|
Так прямо этот код и вставляй, без изменений
|
Цитата:
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
div {
width:200px;
background-color: green;
}
</style>
<script src="js/FileSaver.js"></script>
<script src="js/canvas-toBlob.js"></script>
<script type="text/javascript" src="http://night-creature.com/html2canvas.js"></script>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
</head>
<body>
<div id="downimg">
<div>
some text
</div>
</div>
<script language="javascript">
canvas.toBlob(function(blob) {
saveAs(blob ,"blabla.png");
}, "image/png");
:help:
</script>
<form id="canvas-options">
<label>
Filename:
<input id="canvas-filename" class="filename" type="text" placeholder="doodle"/>
.png
</label>
<input type="submit" value="Save"/>
<input id="canvas-clear" type="button" value="Clear"/>
</form>
</body>
</html>
|
Ну вобще-то canvas с неба не свалится. Где у тебя тут вызов функции html2canvas? В коде выше у тебя все есть, а тут уже нету.
|
Цитата:
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
div {
width:200px;
background-color: green;
}
</style>
<script src="js/FileSaver.js"></script>
<script src="js/canvas-toBlob.js"></script>
<script type="text/javascript" src="http://night-creature.com/html2canvas.js"></script>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
</head>
<body>
<div id="downimg">
<div>
some text
</div>
</div>
<script language="javascript">
function downimg(){
html2canvas($('#contener'), {
onrendered: function (canvas) {
var img = canvas.toDataURL('image/png').replace("image/png", "image/octet-stream");
window.location.href = img;
}
});
}
canvas.toBlob(function(blob) {
saveAs(blob ,"blabla.png");
}, "image/png");
</script>
<form id="canvas-options">
<label>
Filename:
<input id="canvas-filename" class="filename" type="text" placeholder="doodle"/>
.png
</label>
<input type="submit" value="Save"/>
<input id="canvas-clear" type="button" value="Clear"/>
</form>
</body>
</html>
не работает:-E |
Цитата:
Куда вставить эту конструкцию, чтоб работала? canvas.toBlob(function(blob) { saveAs(blob ,"blabla.png"); }, "image/png"); |
Туда, где доступна переменная canvas, ясное же дело.
|
Спосибо за попытку помочь. Ну я прям вобще чайник, не чего не понял:blink:
|
:-/ внутрь onrendered засунь. А старый код что там - удали.
|
Не работает:cray:
|
А вы сами делали? У вас Работает?
|
umenia ta je samia prablema
var img = canvas.toDataURL('image/png').replace("image/png", "image/octet-stream")+".png";
a razve tak nelzia dat rashirenie failu ???? |
Спасибо danik.js BIG!!! Все работает.
|
danik.js,
Доброго времени! А я вот вашим кодом воспользовался, и немного не понял: если содержимое уходит за границу экрана вправо, то оно не будет отрисоовываться на картинке? а если вниз то отрисоовывается! можно с этим как то справиться? что бы все отрисоовывалось, не зависимо от размера экрана!? |
danik.js,
После 4 часов копания в коде в библиотеке html2canvas я понял в чем моя ошибка! ширина самого элемента 1900 а вот в него входит элемент с шириной 2100, но библиотека смотрит на ширину родительского элемента. растянул его и все получилось)))) извиняюсь за тупость! |
Почему-то не работает
Вроде все сделала как написано, но у меня страница в итоге просто обновляется и все. Кто-нибудь знает что делать?
|
dmivasant, У Вас получилось сделать?
|
Спасибо всем за код но столкнулся с траблом. В хроме работает, а фаерфокс не хочет никак. Ни ошибок ни чего :(. Причем демо страница с saveAs работает без вопросов на фаерфоксе...
function getScreenshot(){
html2canvas(jQuery('.quote-block'), {
onrendered: function(canvas) {
canvas.toBlob(function(blob) {
saveAs(blob ,"quote.png");
}, "image/png");
}
});
}
|
Цитата:
|
Честно что то получилось, но на данный момент не помню уже как и что. Вот сайтик там можно поиграться учитель-сказал.рф . Но все равно не доволен качеством скриншета, иногда он наманый иногда буквы пляшут, надо бы обновить плагин попробовать вдруг что изменили :)
|
| Часовой пояс GMT +3, время: 03:04. |