主要浏览器的子像素精度的当前状态是什么?
我正在研究一个需要高度准确性的绘图应用程序,我想知道哪个主要的浏览器平台(包括HTML Canvas元素和Flash)为绘制的元素提供了最佳的子像素布局精度Canvas或Flash中的矩形,浏览器中绝对定位的DIV)和文本。
在这个网站和其他网站上有很多与此相关的post(见底部的列表),但是很多都是相当老的,没有一个总结了目前的情况。
我的理解是,Flash具有对子像素定位的本机支持,使用缇来将对象定位到像素的二十分之一,并且当使用TextLayoutFramework时,这种准确性也延伸到文本。 至less有一个报告,但是,这不能在Chrome中正常工作。 任何人都可以确认吗?
我对浏览器情况的理解是,Firefox 14+支持在页面布局和canvas内的文本和绘制元素的子像素定位,但是我无法确定这是多么准确。
我了解Chrome(截至v21)根本不支持子像素定位。
我了解IE9不支持子像素定位,但是从IE下面链接的MS博客上可以看出IE10会。
我不知道是否有任何Mac / PC的差异,我不知道平台和/或浏览器Flash的准确性是否有所不同。
我理解这样一个总结性的问题可能会引起一些争论,但是我相信这个具体的问题足以让人们提供有用的答案,并且希望这个线程能够成为目前定位精度状态的参考。
一些参考:
http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx
Chrome Canvas中的子像素渲染
http://johnblackburne.blogspot.co.uk/2011/11/twips.html
http://ejohn.org/blog/sub-pixel-problems-in-css/
Sub Pixel CSS定位
https://productforums.google.com/forum/?fromgroups=#!topic/chrome/pRt3tiVIkSI
目前,你可以期待最好的四舍五入和子像素支持来自Mozilla与IE作为亚军。 IE可能最终被调整得更好,但是他们的发布周期太长,以至于Mozilla可能会保持领先。
至于做子像素布局,你可能会追逐一缕,因为子像素的优势提高了抗锯齿问题,而不是屏幕位置的准确性。 无论是否支持子像素,您的图像都不会比真实位置的像素更精确。
一些浏览器不能正确缩放的原因与子像素支持无关,这是因为他们没有正确记住确切的位置和舍入。 换句话说,它们过早地将这个位置变成了四舍五入,导致图像错位。
简短的回答:
不,这是不可能的/logging。
而且即使通过实验确定,未来也不保证保持不变。
很长的回答:
在亚像素精度方面,浏览器/操作系统/硬件之间关于如何捕获/呈现input的方面存在很大的差异。 在大多数现代浏览器上启用了h / w加速function后,在不同操作系统上运行不同浏览器的不同PC之间的渲染数量会有很大的变化。 因此,通过共同采样的渲染输出的略微不同的变化,甚至可以识别每个独特的用户。
而不是担心在底层框架的差异,如何devise您的绘图应用程序的UI独立于这些问题。 我现在可以想到的几种方法是:
-
允许在缩放/放大级别下编辑图像。
-
为元素devise一个alignment网格方法。
更新:
“缩放”操作将您的自定义实现,而不是底层框架的function。 因此,如果您需要像素精度达到像素1/10的数量级,则需要将10x_zoom()作为您的Web应用程序的一部分来实现,该应用程序将呈现数据
第一个像素 – > 10×10像素在(0,0),
第二个像素 – > 10×10像素从(11,11)开始。
这样,人们可以对数据有一个非常放大的视图,但是框架并没有意识到这一点,并且对屏幕上的像素(在我们的例子中现在是图像像素的十分之一)是精确的。
另外一个重要的事情要注意,这个操作会消耗大量的内存,如果一次完成整个图像。 因此,仅在“缩放窗口”中对图像的可见部分进行这样的处理将会更快,并且更less的内存密集处理。
一旦在您的绘图web应用程序中实现,框架中的子像素不准确性可能不会成为用户的问题,因为他总是可以切换到这些模式并提供准确的input。