Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Screenshot определенной части экрана средствами javascript (https://javascript.ru/forum/jquery/40173-screenshot-opredelennojj-chasti-ehkrana-sredstvami-javascript.html)

dmivasant 26.07.2013 12:45

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:

danik.js 26.07.2013 13:11

Ух ты! Не знал что такое можно провернуть в Firefox.
Подключай либы FileSaver.js и canvas-toBlob.js.
Когда нужно сохранить содержимое холста, вызывай:
canvas.toBlob(function(blob) {
	saveAs(blob ,"blabla.png");
}, "image/png");

danik.js 26.07.2013 13:13

А причем тут jQuery?

dmivasant 29.07.2013 04:17

Цитата:

Сообщение от danik.js (Сообщение 264338)
Ух ты! Не знал что такое можно провернуть в Firefox.
Подключай либы FileSaver.js и canvas-toBlob.js.
Когда нужно сохранить содержимое холста, вызывай:
canvas.toBlob(function(blob) {
	saveAs(blob ,"blabla.png");
}, "image/png");

А можно на моем примере подробно?

danik.js 29.07.2013 04:32

Так прямо этот код и вставляй, без изменений

dmivasant 29.07.2013 05:31

Цитата:

Сообщение от danik.js (Сообщение 264765)
Так прямо этот код и вставляй, без изменений

Не понимаю я, вставил код, а нечего не работает

<!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>

danik.js 29.07.2013 05:56

Ну вобще-то canvas с неба не свалится. Где у тебя тут вызов функции html2canvas? В коде выше у тебя все есть, а тут уже нету.

dmivasant 29.07.2013 06:12

Цитата:

Сообщение от danik.js (Сообщение 264769)
Ну вобще-то 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

dmivasant 29.07.2013 07:38

Цитата:

Сообщение от dmivasant (Сообщение 264772)
<!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");

danik.js 29.07.2013 08:21

Туда, где доступна переменная canvas, ясное же дело.

dmivasant 29.07.2013 08:50

Спосибо за попытку помочь. Ну я прям вобще чайник, не чего не понял:blink:

danik.js 29.07.2013 09:09

:-/ внутрь onrendered засунь. А старый код что там - удали.

dmivasant 29.07.2013 10:20

Не работает:cray:

dmivasant 29.07.2013 10:29

А вы сами делали? У вас Работает?

kalandara 09.05.2014 00:32

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 ????

dgavatar 05.11.2014 23:20

Спасибо danik.js BIG!!! Все работает.

monax_111 30.08.2015 13:07

danik.js,
Доброго времени! А я вот вашим кодом воспользовался, и немного не понял: если содержимое уходит за границу экрана вправо, то оно не будет отрисоовываться на картинке? а если вниз то отрисоовывается! можно с этим как то справиться? что бы все отрисоовывалось, не зависимо от размера экрана!?

monax_111 02.09.2015 13:10

danik.js,
После 4 часов копания в коде в библиотеке html2canvas я понял в чем моя ошибка! ширина самого элемента 1900 а вот в него входит элемент с шириной 2100, но библиотека смотрит на ширину родительского элемента.
растянул его и все получилось))))
извиняюсь за тупость!

kaoritomo 08.09.2015 17:00

Почему-то не работает
 
Вроде все сделала как написано, но у меня страница в итоге просто обновляется и все. Кто-нибудь знает что делать?

kaoritomo 08.09.2015 17:01

dmivasant, У Вас получилось сделать?

kiran 17.04.2016 00:05

Спасибо всем за код но столкнулся с траблом. В хроме работает, а фаерфокс не хочет никак. Ни ошибок ни чего :(. Причем демо страница с saveAs работает без вопросов на фаерфоксе...

function getScreenshot(){
	html2canvas(jQuery('.quote-block'), {
	  onrendered: function(canvas) {
    	canvas.toBlob(function(blob) {
    		saveAs(blob ,"quote.png");
		}, "image/png");
	  }
	});
}

niger999 26.09.2016 18:25

Цитата:

Сообщение от kiran (Сообщение 414348)
Спасибо всем за код но столкнулся с траблом. В хроме работает, а фаерфокс не хочет никак. Ни ошибок ни чего :(. Причем демо страница с saveAs работает без вопросов на фаерфоксе...

function getScreenshot(){
	html2canvas(jQuery('.quote-block'), {
	  onrendered: function(canvas) {
    	canvas.toBlob(function(blob) {
    		saveAs(blob ,"quote.png");
		}, "image/png");
	  }
	});
}

Решили проблему с мозилой?

kiran 29.09.2016 11:07

Честно что то получилось, но на данный момент не помню уже как и что. Вот сайтик там можно поиграться учитель-сказал.рф . Но все равно не доволен качеством скриншета, иногда он наманый иногда буквы пляшут, надо бы обновить плагин попробовать вдруг что изменили :)


Часовой пояс GMT +3, время: 14:20.