使用 CSSzoom
属性时,如何说服浏览器使用“最近邻”而不是“双线性”或任何其他更高级的缩放算法?
我的设置是一个包含画布的 div,该 div 通过 JavaScript 获取其缩放设置<div style="zoom:3200%">...</div>
,以获取最近的邻居,我image-rendering: -webkit-optimize-contrast
在我的 CSS 中使用。该应用程序在此处可用('z' 放大,'shift-z' 缩小),我的 css 在这里
这是在 OSX 上的 Chrome 中所需的效果(缩放设置为 3200%):
但在 Windows 7 上的 Chrome 中也是如此:
在这两种情况下,它都是开箱即用的“香草”Chrome(版本 15.xx),没有打开实验标志。
如何说服 Windows 上的 Chrome 使用最近邻居?就此而言,我怎样才能说服所有浏览器?Safari 也不使用最近邻(目前该应用仅适用于基于 WebKit 的浏览器)
CSSimage-rendering
属性确实会影响 Chrome/OSX 并给我想要的效果。但是 Chrome/Windows 和 Safari(5.1)/OSX 似乎都完全忽略了它。有些事情告诉我我只是运气不好,但我想我会问。
在 div 容器上使用zoom
非常简单,并且在 Chrome/OSX 中运行良好,如果我必须在内部使用缩放画布,我也可以这样做。但如果可能的话,更喜欢字面上的一行代码解决方案!
更新:我发现使用image-rendering: optimizeSpeed
帮助。然而,它在 Chrome/Windows 中似乎很挑剔。如果我将它设置在太多元素上(我最初尝试过,我的容器和所有画布),它不会生效。但如果我将它应用到 just canvas
,我会得到 98% 的结果。
现在我的问题是我第一次在放大时绘图,它工作得很好,所有其他后续绘图动作在它们发生时都是模糊的,然后恢复到正确的最近邻居(我的应用程序首先绘制到临时画布,然后将绘图应用到真实的画布上)。Chrome 坚持使用双线性的草稿画布有些奇怪。我认为通过一些挖掘我可以解决这个问题。
UPDATE2:似乎image-rendering
在 Chrome/Windows 上实现得并不好,而且有点问题。我现在可以确认 Chrome/Windows 不支持这些optimizeSpeed
值optimizeQuality
。如果您为它们设置图像渲染,Chrome 将忽略该设置。Chrome/Windows 确实可以识别-webkit-optimize-contrast
,但它并没有始终如一地使用它。Chrome 将几乎随机地在看起来是双线性缩放算法和最近邻算法之间切换。我无法始终让 Chrome 使用最近邻。
我在 Windows 上尝试了 Chromium 17 的构建,它的行为方式相同。
Firefox (8.0.1) 看起来很有希望,因为它看起来-moz-crisp-edges
确实很好。最初我将 Chrome 定位为这个应用程序的“理想浏览器”,我可能会切换到 Firefox。
最后,似乎image-rendering
对 Chrome 的适当支持正在酝酿之中,只是还没有完全实现。WebKit 本身声称完全支持所有图像渲染值,但我猜测 Chrome 使用的 WebKit 构建还没有完全更新到这个新修复。