10 ответов:
Упс. Оригинальный ответ был специфичен для аналогичного вопроса. Это было пересмотрено:
var canvas = document.getElementById("mycanvas"); var img = canvas.toDataURL("image/png");со значением в IMG вы можете записать его как новое изображение следующим образом:
document.write('<img src="'+img+'"/>');
HTML5 предоставляет холст.toDataURL (mimetype), который реализован в Opera, Firefox и Safari 4 beta. Однако существует ряд ограничений безопасности (в основном связанных с отображением контента из другого источника на холсте).
поэтому вам не нужна дополнительная библиотека.
например
<canvas id=canvas width=200 height=200></canvas> <script> window.onload = function() { var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); context.fillStyle = "green"; context.fillRect(50, 50, 100, 100); // no argument defaults to image/png; image/jpeg, etc also work on some // implementations -- image/png is the only one that must be supported per spec. window.location = canvas.toDataURL("image/png"); } </script>теоретически это должно создать, а затем перейти к изображению с зеленым квадратом в середине его, но я не проверял.
Я думал, что немного расширю сферу этого вопроса, с некоторыми полезными лакомыми кусочками по этому вопросу.
чтобы получить холст в виде изображения, вы должны сделать следующее:
var canvas = document.getElementById("mycanvas"); var image = canvas.toDataURL("image/png");вы можете использовать это, чтобы записать образ на странице:
document.write('<img src="'+image+'"/>');где "image / png" - это тип mime (png-единственный, который должен поддерживаться). Если вам нужен массив поддерживаемых типов, вы можете сделать что-то вроде это:
var imageMimes = ['image/png', 'image/bmp', 'image/gif', 'image/jpeg', 'image/tiff']; //Extend as necessary var acceptedMimes = new Array(); for(i = 0; i < imageMimes.length; i++) { if(canvas.toDataURL(imageMimes[i]).search(imageMimes[i])>=0) { acceptedMimes[acceptedMimes.length] = imageMimes[i]; } }вам нужно только запустить это один раз на странице - он никогда не должен меняться в течение жизненного цикла Страницы.
если вы хотите, чтобы пользователь загрузил файл в сохраненном виде, вы можете сделать следующее:
var canvas = document.getElementById("mycanvas"); var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); //Convert image to 'octet-stream' (Just a download, really) window.location.href = image;если вы используете это с разными типами mime, обязательно измените оба экземпляра image/png, но не image/octet-stream. Также стоит отметить, что если вы используете какие-либо междоменные ресурсы для рендеринга вашего холста, вы будете возникает ошибка безопасности при попытке использовать метод toDataUrl.
function exportCanvasAsPNG(id, fileName) { var canvasElement = document.getElementById(id); var MIME_TYPE = "image/png"; var imgURL = canvasElement.toDataURL(MIME_TYPE); var dlLink = document.createElement('a'); dlLink.download = fileName; dlLink.href = imgURL; dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':'); document.body.appendChild(dlLink); dlLink.click(); document.body.removeChild(dlLink); }
Я бы использовал "wkhtmltopdf". Он просто отлично работает. Он использует движок webkit (используется в Chrome, Safari и т. д.), и он очень прост в использовании:
wkhtmltopdf stackoverflow.com/questions/923885/ this_question.pdfвот именно!
вот некоторая помощь, если вы делаете скачать через сервер (таким образом, вы можете назвать/конвертации/обработке/и т. д. вашего файла):
- сообщение данных с помощью
toDataURL-установить заголовки
$filename = "test.jpg"; //or png header('Content-Description: File Transfer'); if($msie = !strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")==false) header("Content-type: application/force-download");else header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$filename\""); header("Content-Transfer-Encoding: binary"); header("Expires: 0"); header("Cache-Control: must-revalidate"); header("Pragma: public");-создать образ
$data = $_POST['data']; $img = imagecreatefromstring(base64_decode(substr($data,strpos($data,',')+1)));экспорт изображения как JPEG
$width = imagesx($img); $height = imagesy($img); $output = imagecreatetruecolor($width, $height); $white = imagecolorallocate($output, 255, 255, 255); imagefilledrectangle($output, 0, 0, $width, $height, $white); imagecopy($output, $img, 0, 0, 0, 0, $width, $height); imagejpeg($output); exit();imagesavealpha($img, true); imagepng($img); die($img);
еще одно интересное решение PhantomJS. Это безголовый webkit scriptable с JavaScript или CoffeeScript.
лучшая точка входа-это захват экрана вики-страницы.
вот хороший пример для полярных часов (от RaphaelJS):
>phantomjs rasterize.js http://raphaeljs.com/polar-clock.html clock.pngвы хотите отобразить страницу в формате PDF ?
> phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
Если вы используете jQuery, что довольно много людей делают, то вы бы реализовали принятый ответ следующим образом:
var canvas = $("#mycanvas")[0]; var img = canvas.toDataURL("image/png"); $("#elememt-to-write-to").html('<img src="'+img+'"/>');
вы можете использовать jspdf для захвата холста в изображение или pdf следующим образом:
var imgData = canvas.toDataURL('image/png'); var doc = new jsPDF('p', 'mm'); doc.addImage(imgData, 'PNG', 10, 10); doc.save('sample-file.pdf');дополнительная информация:https://github.com/MrRio/jsPDF
в некоторых версиях Chrome можно:
- используйте функцию рисования изображения
ctx.drawImage(image1, 0, 0, w, h);- щелкните правой кнопкой мыши на холсте
Comments