为什么Eclipse和eclipse中渲染的所有粗体字体在Linux和Windows之间都有很大不同?Eclipse和粗体字体在Linux和Windows之间呈现很不同
我测试了其他字体,所有这些在Linux渲染是多一点点勇敢的,字体的粗体版本似乎是另一种字体,是非常不同的。
有办法减少这种影响?
编辑:硬件和虚拟化
两者是相同的监视器上运行。裸机上的Windows,Virtualbox内的Linux(Windows是主机操作系统)。
为什么Eclipse和eclipse中渲染的所有粗体字体在Linux和Windows之间都有很大不同?Eclipse和粗体字体在Linux和Windows之间呈现很不同
我测试了其他字体,所有这些在Linux渲染是多一点点勇敢的,字体的粗体版本似乎是另一种字体,是非常不同的。
有办法减少这种影响?
编辑:硬件和虚拟化
两者是相同的监视器上运行。裸机上的Windows,Virtualbox内的Linux(Windows是主机操作系统)。
典型计算机屏幕的像素密度太低,无法准确显示字体字形等小形状(过多的舍入错误)。因此,每个主要的文本堆栈(足够复杂,不会有多于操作系统的一个文本堆栈)必须决定当它们没有整齐地适合精确的像素倍数时向上或向下舍入字形维度(将字形像素网格,又称“网格拟合”),它准备在该过程中扭曲字形的多少(像素化,在一维中移动一些比特而在另一维中移动一些比特),是否使用灰度像素或甚至彩色像素平滑边缘(“亚像素”平滑也会产生色边)等。
而且,要一直这样做。如果你生成一个非常清晰的字形,但它失去了与同一字体的其他字形的对齐,这没有帮助。如果字体的连续大小不是线性的,则不会有帮助,因为有些字体已被舍入,其他字体则被舍去。如果您的渲染算法更改或不同地移动相同字形的连续迭代,则不起作用,但一系列iiiiiii或lllll可能并不常见,但系列或11111111不在电子表格中。
粗体比普通文字更难,因为在典型大小的典型屏幕上,字体已经收敛到大约一个或两个像素宽度,但用户期望大胆胖一点而不胖两倍。
不是两个文本堆栈可以做出相同的折衷,而Windows默认渲染特别极端,试图以几乎所有其他因素为代价获得尖锐细的形状。苹果和Adobe的渲染通常比较平滑(但“模糊”),而Linux则介于两者之间,近年来Adobe在Linux渲染堆栈中贡献巨大。
从来没有人能够证明一种渲染风格比其他渲染风格更好。唯一一致的因素是用户习惯于的,将用户暴露于一种渲染方式几个月,他会恨所有其他人,他接触到哪个渲染并且可以通过迫使他使用来改变另一个渲染几个月。可能是由于大脑形状识别过程自我训练和优化他们最经常看到的方式。一个用户接触到特定字体和文本渲染的人越多,他会发现这种特殊的组合令人愉快且易于阅读。
Linux非常强大,可以强制其渲染堆栈的行为更像Windows。如果你习惯了Windows渲染,那对你来说会更愉快。对于任何不在Windows中度过生活的人来说,这将不那么令人愉快。通常情况下,更改fontconfig中的暗示攻击性,从灰度平滑到rgbA(即将产生色彩边缘)。甚至使用像无限的修补版本(相当极端,而不是真的必要,改变fontconfig设置通常就足够了)。像gnome-tweak-tool这样的东西可以帮助你图形化,而eclipse通过SWT继承gtk设置。或者,使用更大的文本或购买高密度(highdpi)屏幕。与字形元素相比,较小的像素与您获得的网格拟合舍入效果越少,无论使用何种文本堆栈。具有足够高的像素密度,您可以获得“理想”的字形形状和重量,就像在一台好的激光打印机上一样。
当然,假设操作系统能够驱动高分辨率的屏幕。 Linux应该到达那里,但上次我检查时Windows仍然坚持在96dpi的土地上。最后,如果您在虚拟环境中工作,VM层可能会隐藏虚拟软件的一些硬件特性。因此,准确检测屏幕特征并相应地调整其渲染的机会较少。