是否可以捕获或打印html画布中显示的图像或pdf?
我想通过画布生成一个图像,并能够从该图像生成一个png.
我是一名经验丰富的Java程序员,但我在大约十年来第一次看到一些JavaScript/HTML5的东西.我完全不知道应该是最简单的事情.
作为一个例子,我只想绘制一些东西并为其添加一个事件处理程序.我确定我做了一些愚蠢的事情,但我已经搜索了所有内容并且没有任何建议(例如,这个问题的答案: 添加onclick属性以使用JavaScript输入).我正在使用Firefox 10.0.1.我的代码如下.您将看到几条注释行,并在每一行的末尾是对(或什么不)发生的描述.
这里的语法是什么?我要疯了!
<html>
<body>
    <canvas id="myCanvas" width="300" height="150"/>
    <script language="JavaScript">
        var elem = document.getElementById('myCanvas');
        // elem.onClick = alert("hello world");  - displays alert without clicking
        // elem.onClick = alert('hello world');  - displays alert without clicking
        // elem.onClick = "alert('hello world!')";  - does nothing, even with clicking
        // elem.onClick = function() { alert('hello world!'); };  - does nothing
        // elem.onClick = function() { alert("hello world!"); };  - does nothing
        var context = elem.getContext('2d');
        context.fillStyle = '#05EFFF';
        context.fillRect(0, 0, …我正在尝试选择合适的技术来更新项目,该项目基本上可以在可缩放的可缩放图形中渲染数千个点.使用Protovis的当前实现表现不佳.看看这里:
http://www.planethunters.org/classify
完全缩小时大约有2000个点.尝试使用底部的手柄放大一点,然后拖动它以平移.除非你有一台真正快速的计算机,否则你会发现它非常不稳定,你的CPU使用率可能在一个核心上达到100%.对焦点区域的每次更改都会调用重绘为protovis,这种方法非常慢,并且绘制的点数越多越差.
我想对界面进行一些更新,以及更改底层可视化技术,以便更灵敏地进行动画和交互.从下面的文章看,似乎是在另一个基于SVG的库或基于画布的库之间进行选择:
http://www.sitepoint.com/how-to-choose-between-canvas-and-svg/
d3.js,源自Protovis,基于SVG,应该更好地渲染动画.但是,我怀疑它有多好,它的性能上限是多少.出于这个原因,我也在考虑使用像KineticJS这样的基于画布的库进行更彻底的改造.然而,在我使用一种或另一种方法之前,我想听听那些使用这么多数据做过类似Web应用程序并得到他们意见的人.
最重要的是性能,第二个重点是易于添加其他交互功能和编程动画.一次可能不会超过2000个点,每个点上的误差小.放大,缩小和平移需要顺利进行.如果最新的SVG库在这方面还不错,那么使用d3的方便性可能会超过KineticJS的增加设置等.但是如果使用画布有巨大的性能优势,特别是对于计算机速度较慢的人来说,那么我肯定会喜欢这样.
使用SVG的纽约时报制作的应用程序示例,但仍然可以顺利地动画:http://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html .如果我可以获得该性能而不必编写自己的画布绘图代码,我可能会选择SVG.
我注意到一些用户使用了混合的d3.js操作和画布渲染.但是,我无法在网上找到很多关于此的文档或与该帖子的OP联系.如果有人有任何使用DOM-to-Canvas(演示,代码)实现的经验,我也想听听你的意见.它似乎是一个很好的混合体,能够操纵数据和自定义控制如何渲染它(以及因此性能),但我想知道是否必须将所有内容加载到DOM仍然会减慢速度.
我知道有一些类似于这个问题的现有问题,但它们都没有提出同样的问题.谢谢你的帮助.
后续行动:我最终使用的实现是https://github.com/zooniverse/LightCurves
是否有任何类似d3.js的Canvas库(是svg库).我在这里有一个网站,我用svg元素编写了一个图形,但它在智能手机的浏览器上效率不高,而且运行速度很慢.我现在想要用它的2d画布类型来改变它,看它是否更好.你能建议一个对此有用的画布库吗?
谢谢...
我意识到有很多教程和网站,一切都在回答"哪个更适合游戏应用程序?" 他们都说SVG不适合游戏应用,画布就是.但这让我很困惑.
所以我要说我正在做一个平台游戏.我希望主角走过舞台,背景画得很漂亮.在Canvas中,我要么必须重新创建她的整个hitbox(重新绘制每个移动实体的位置),要么制作一个单独的画布元素并使用可能ctxChar, ctxBG, ctxItems等等.另一方面,SVG内置它.我甚至可以放一个<animate>她的内部标签<use>,改变她的x位置(或通过JS手动改变它)标签,而另一个<animate>标签改变她的精灵.然后永远不必触及背景.
至于同时制作一堆元素的动画,我不知道在Canvas中的速度如何比在SVG中更快.将svg元素放入组中有什么问题?它可以比重绘hitboxes的背景并为所有实体重绘实体本身更慢吗?
编辑:我认为我的真正问题不在于SVG是否可行,而是为什么人们认为它不可行.
1.)我找到了一个名为EaselJS的画布API,它为你绘制的每个元素创建一个显示列表做了很棒的工作.它们基本上成为画布上可单独识别的对象(在一个画布上)
2.)然后我在http://simonsarris.com/上看到了这个可以拖放的教程,它利用隐藏的画布概念进行选择.
3.)第三种方法,一种工作方法,http://www.lucidchart.com/,这正是我想要实现的,基本上在不同的画布上有每一个形状,并用于定位它们.有大量的帆布.
问题是,如http://www.lucidchart.com/所示,实现交互式网络图的最简单方法是什么?
一个侧面的问题是,通过在画布上定位或使用多个画布(一个用于渲染文本)来获取文本输入更好,如LucidChart
我需要为"标准"图表选择一个库:馅饼,线条和条形图.
从我所读到的,在我看来,最好的格式是SVG/VML,例如Highcharts.现在,IE 9已经成为所有主流浏览器的标准配置.重新缩放和导出似乎比Canvas更容易.
不过,我看到几个图表库依赖于Canvas.我错过了什么吗?是否有任何理由考虑使用Canvas over SVG进行此类应用?
我想问一下是否有人能给我一些我想做的设计决定的提示.
我的项目将包含一些精灵(一次在屏幕上预期10到30个),并且有几种方法可以实现它们.一种方法是CSS-Sprites,另一种方法是在画布上绘制它们.两者都不难.背景将是另一个<canvas>在后台绘制的图块地图.
我已经看到Crafty附加了Sprites,<div>因为它在HTML中<canvas>作为CSS-Sprite.我不确定如果<div>在画布中是否存在速度差异.有区别吗?
我希望用户通过鼠标点击,左,右等与精灵交互.精灵当然是在瓷砖地图的元素上站立或行走.那么编写一个处理程序<canvas>并找到精灵更有效率,或者更确切地说使用<div>并让浏览器处理这个发现?
我希望我可以传达我的问题.
canvas ×9
html5 ×7
javascript ×4
svg ×3
d3.js ×2
kineticjs ×2
2d-games ×1
charts ×1
css-sprites ×1
easeljs ×1
export ×1
html ×1
html5-canvas ×1
interactive ×1
onclick ×1
performance ×1
pie-chart ×1
png ×1
raphael ×1