【问题标题】:How do browsers handle image resampling when resizing an image in canvas?在画布中调整图像大小时,浏览器如何处理图像重采样?
【发布时间】:2012-11-22 16:47:55
【问题描述】:

您好,我正在使用画布元素和 jQuery 创建一个视频游戏。其中一部分需要绘制拱形路径和圆圈。不幸的是,这会产生子像素和抗锯齿问题。没有浏览器允许您简单地禁用抗锯齿,所以我一直在考虑使用其中有圆圈的图像。另一部分是游戏窗口可以根据浏览器窗口改变大小,因此会改变其中图像的大小。

我的问题的一个更全面的例子是:如果我创建一个(例如)80 像素的图像并且游戏想要将其缩放到 37 像素,我可以将它作为我游戏中对象的预渲染吗?另外,如果我这样做,画布会用子像素渲染它吗?

附:我不是在寻找任何代码示例,这只是一个技术问题,我似乎找不到任何文档。

【问题讨论】:

  • 您查看过-ms-interpolation-mode 属性吗?
  • @Dai 太糟糕了,我们都希望 MSIE 死;-)
  • IE 对我来说太多了。我无法处理必须重新编码我的 javascript 的几乎每个部分以在 IE 中工作。无论如何,Firefox 和 Chrome 将是性能最好的。
  • 嗯,其实IE10还是不错的。我最近写的游戏不需要在 IE10 中重新编码。

标签: javascript jquery html canvas image-scaling


【解决方案1】:

这可以帮助您扩展使用图像而不是路径来绘制非插值图像的想法。

ctx.imageSmoothingEnabled       = false;
ctx.mozImageSmoothingEnabled    = false;
ctx.oImageSmoothingEnabled      = false;
ctx.webkitImageSmoothingEnabled = false;

同时确保在提供位置和尺寸时使用整数;

ctx.drawImage(something, x | 0, y | 0);

【讨论】:

  • 至于整数的使用:所有浏览器/平台越多的 GPU 加速,四舍五入的用处就越少。例如,这在 Chrome (23) PC/mac 上没有任何改变。
  • 我同意文森特 - 但在使用浮点数时还有一个缺陷 - 当提供浮点数时,浏览器会进行一些亚像素插值 - seb.ly/2011/02/html5-canvas-sprite-optimisation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 2012-10-25
  • 2015-11-08
  • 1970-01-01
  • 2012-08-27
  • 2018-06-19
  • 2012-06-13
相关资源
最近更新 更多