【问题标题】:What HTML5 Canvas Pixel Detection and image manipulation libraries are out there?有哪些 HTML5 Canvas 像素检测和图像处理库?
【发布时间】:2012-07-19 00:14:18
【问题描述】:

我正在尝试开发一个“Web 应用程序”(由于缺乏更好的术语),它使用用于移动设备的 HTML5 Canvas 元素显示一种交互式地图。该地图有大约 30 座不同形状和大小的建筑物(由其上的半透明 PNG 图像制成)。我希望用户能够点击任何建筑物以获取有关它们的信息。这些建筑物通常位于与其他建筑物相同的理论边界框内,因此它并不像仅检测用户何时点击边界框那么简单(想象一个 U 形建筑物和 U 内的另一建筑物)。因此,它应该使用某种光栅像素检测。为了让事情变得更复杂,我需要允许用户在地图上放大/缩小和平移(因为 30 座建筑物和一张地图对于在一个小手机屏幕上显示用户来说太过分了)。所以缩放和平滑移动是必要的。

我正在寻找可以支持这些功能的 JavaScript 库:

  1. 图像像素检测
  2. 移动触摸事件
  3. 画布(或舞台?)缩放
  4. 可在移动设备上使用

到目前为止,我发现 KineticJS 支持所有这些功能。但是当我尝试在舞台上移动超过 4 个建筑物的地图时,它太跳动了。我尝试检查 Fabric.js,但它似乎没有像素检测(因为当您在边界框内单击时它会选择图像,而不是实际图像本身)。

还有其他 JavaScript 库可以做这些事情吗?

感谢您的帮助!

【问题讨论】:

    标签: javascript html5-canvas


    【解决方案1】:

    KineticJS 非常好(目前我发现的最好的库)

    我从来没有尝试过使用 png 图像,但是使用数百个原始对象进行缩放和平移非常流畅(没有像素检测 - 我想像素检测是相当昂贵的 cpu 操作)。

    也许您可以尝试叠加标准多边形(一栋建筑有几个)并附加到同一个点击/点击事件。

    此外,您无需在画布上移动对象,只需将较大的画布放在较小的 div 中(带有溢出:隐藏)并拖动整个画布元素。

    【讨论】:

    • 感谢您的反馈!我尝试了与您的答案有关的几个选项,但它们似乎不起作用。我打算尝试多边形解决方案,但即使我关闭了像素检测,渲染所有 PNG 似乎也是问题。将画布放在另一个 DIV 中是行不通的,因为它必须在放大和缩小时重新渲染以提高清晰度,并且毫不奇怪,重新渲染与移动它们一样糟糕。我认为这可能只是在 Javascript 和 HTML 中将设备推得太远。我希望那里可能有另一个图书馆可以尝试。
    • 关于地图移动慢的问题,你有没有尝试将stage的draggable属性设置为true?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2016-01-19
    • 2021-02-07
    • 2019-12-12
    相关资源
    最近更新 更多