[原标题:IE 9文字渲染效果很差; 有解决方法吗?)
IE 9正在渲染我的应用程序中的文本非常糟糕.问题不在我的显示器的清除类型设置中,因为兼容模式下的IE 9,Firefox和Chrome都能很好地呈现文本.以下是对IE 9,兼容模式下的IE 9和Chrome进行文本渲染的并排比较:



我尝试应用这个答案,但它似乎不适用于IE 7后的任何内容.有人知道我们可以应用于我们的网站来修复IE 9的坏文本呈现的任何变通方法吗?
编辑:
我把问题页面简化为最基本的要点.正如您所看到的,重现并不需要太多.如果IE9和IE9标准的文档模式,请确保IE具有浏览器模式:
<html xmlns="http://www.w3.org/1999/xhtml">
<body style="background-color: rgb(30, 34, 59); color: rgb(255, 85, 0); font-size: 20px">
Home
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我们有一个小型的网络应用程序,我们想要转换成原生的东西.现在,它有很多移动部件(后端,浏览器等),我们想把它转换成一个紧凑的应用程序.我们决定使用PyGame来做到这一点,除了字体渲染问题之外它一直很好.
具体的代码点是\ u0915\u094b\u091d\u093f\u0915\u094b和\ u0921
现在,这在我的编辑器和浏览器中看起来很好但是当我尝试在PyGame中渲染时,我得到了这个
.基本上,元音符号(\ u093fÇ)应该位于left的左侧,但它看起来在它的右侧(并且在क的左侧),从而完全弄乱了它.这不会发生在浏览器或文本编辑器(具有相同的输入字符串)中,因此我猜测它是PyGame中的渲染器问题.
有一个原始修复只适用于这种特殊情况,即将Ç(\ u093f)置于झ(\ u091d)之前.在这种情况下,它会像这样正确呈现
.这依赖于我对语言的了解并将该逻辑放入代码中.我必须在这里处理多种语言,所以这不可行.
我对unicode没有太多经验,所以我不知道如何解决这个问题.有什么我可以做的来解决这个问题吗?
如果它很重要,我正在使用Debian上的freesans字体,并且它具有必要的字形来呈现它.
更新: 实际呈现此代码的代码如下
# -*- coding: utf-8 -*-
import time
import pygame
# Pygame setup and create root window
pygame.font.init()
screen = pygame.display.set_mode((320, 200))
empty = pygame.Surface((320, 200))
font_file = pygame.font.match_font("freesans") # Select and
font = pygame.font.Font(font_file, 30) # open the font
writing = font.render(u"??????? ???????", True, (0, 0, 0)) # Render text on a surface
screen.fill((255, 255, 255)) # Clear the background
screen.blit(writing, …Run Code Online (Sandbox Code Playgroud) 我NSTextField在CALayer背景视图中呈现了一些可变文本.由于CALayer不支持对其上方任何文本进行文本呈现的子像素别名,因此该文本看起来很垃圾.
一些谷歌搜索揭示了原因,并且必须将文本渲染到不透明的背景上才能启用SPA.在这种情况下,如果可能的话,我想避免渲染到不透明的背景上.有更好的解决方法吗?
我完全可以将自己的文本呈现为NSImage,如果这会有所帮助,但我找不到任何已确认的报告.
它在Interface Builder中看起来非常好,所以我知道秘密就在这台计算机内的某个地方,只是为了摆脱困境.
IE 8及更低版本渲染文本,如果它超过任何应用了"过滤器"的元素.没有什么比这更令人惊讶的了.我通常只是避免使用"过滤器".但是,我在IE9中做了一些测试,我注意到了一个巨大的问题; 在应用了css3渐变或框阴影的任何元素上渲染的文本,文本渲染将被销毁.不仅是直接在元素顶部的文本,而且在z-index中的每个元素都在渐变之上.例如,如果我使用渐变定义页面的背景,将其覆盖在纯白色div中,然后在其上面渲染文本,它仍然很糟糕.我真的希望这只是一个测试版问题,将在最终版本中解决.我一直在使用这里的代码,对于渐变一段时间(减去过滤器),但现在在IE9中使用这种技术的所有页面看起来都很糟糕.有谁知道这件事 - 当我用Google搜索时,我找不到任何关于这个问题的信息.
internet-explorer filter text-rendering css3 internet-explorer-9
我发现虽然在Java中渲染不透明文本(最新版本6u23)使用子像素AA就好了,渲染半透明文本却没有.
子像素AA:

只有颜色从0xFFFFFFFF变为0xBFFFFFFF的相同文本:

正如你所看到的,半透明文字显然是标准AA,而不是干净的半透明渲染,它具有可怕的'90年代"蜘蛛"外观.
这是由于一般的子像素AA的技术限制,还是Java中的错误,还是因为Java甚至没有尝试半透明文本,或者我错过了什么?
图形初始化
dbGraphics=(Graphics2D)dbImage.getGraphics();
if(dctRoot.properties.getBoolean("Antialias",true)) {
try {
Map hnts=(Map)(dctRoot.awtComponent.getToolkit().getDesktopProperty("awt.font.desktophints"));
// SET AA ON OVERALL (NOTE: GENERAL AA MUST BE OFF FOR SUBPIXEL AA TO BE HONORED - TEXT WIDGETS MUST DO THIS THEMSELVES)
dbGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
if(hnts!=null) {
// SET FONT RENDERING HINTS FROM DESKTOP
dbGraphics.addRenderingHints(hnts);
}
else {
try {
// SET TEXT AA TO FONT-SPECIFIED GASP AA (JAVA 6+)
dbGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.class.getField("VALUE_TEXT_ANTIALIAS_GASP").get(null));
}
catch(Throwable thr3) {
// SET TEXT AA TO DEFAULT
dbGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
}
}
}
catch(Throwable thr) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用OpenGL渲染freetype字体,遵循http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Text_Rendering_02上发布的示例.
我已经能够从字体生成纹理图集,创建着色器和创建四边形.我似乎被困在的是将纹理传递到着色器和/或为我的四边形获得正确的UV.现在一直在努力,真的需要帮助.
以下是我用来创建纹理图集的结构.
struct FontCharacter
{
float advanceX;
float advanceY;
float bitmapWidth;
float bitmapHeight;
float bitmapLeft;
float bitmapTop;
float uvOffsetX;
float uvOffsetY;
};
struct FontTextureAtlas
{
GLuint texture;
GLuint textureUniform;
int width;
int height;
FontCharacter characters[128];
FontTextureAtlas(FT_Face face, int h, GLuint tUniform)
{
FT_Set_Pixel_Sizes(face, 0, h);
FT_GlyphSlot glyphSlot = face->glyph;
int roww = 0;
int rowh = 0;
width = 0;
height = 0;
memset(characters, 0, sizeof(FontCharacter));
for (int i = 32; i < 128; i++)
{
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个跨平台(桌面浏览器、iOS 和 Android)排版系统,允许用户输入任何 Unicode 字符串。
我应该使用哪些字符串来对我的系统进行压力测试并确保最多9位用户拥有良好的体验?是否有我也可以使用的标准或事实上的标准列表?
出于某些奇怪的原因,调用WinAPI的ExtTextOutW函数在高分辨率位图(2560x1440/3840x2160)上绘制剪切文本会在使用Creators版本更新更新Windows 10后导致性能降低~x50.从我的用户的测试和调试日志中可以看出,位图或字体大小的细微差别可能会触发性能损失.
这是一个显示性能命中的调试日志:
10/05/2017 15:51:50 [ 63227,186] : Calculate Rect
10/05/2017 15:51:50 [ 63227,190] : Rect : Left=263, Top=504, Right=3561, Bottom=2155
10/05/2017 15:51:50 [ 63227,193] : Set Shadow Color
10/05/2017 15:51:50 [ 63227,198] : Render Text Shadow
10/05/2017 15:51:50 [ 63236,650] : Set Text Color
10/05/2017 15:51:50 [ 63236,661] : Render Text "Kingdom come Deliverance"
10/05/2017 15:51:50 [ 63246,062] : Rendering complete
Run Code Online (Sandbox Code Playgroud)
从日志中可以看出,对ExtTextgOutW的单次调用需要大约9.5ms,而同一次调用在创建者更新之前的1ms内完成.
以下是您可以与上面的调试输出进行比较的实际代码:
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Calculate Rect');{$ENDIF}
cRect := Rect(X,Y,Width+X,MainForm.Monitor.Height-(1+(MainForm.Monitor.Height div 540)));
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Rect : Left='+IntToStr(cRect.Left)+', Top='+IntToStr(cRect.Top)+', Right='+IntToStr(cRect.Right)+', Bottom='+IntToStr(cRect.Bottom));{$ENDIF}
{$IFDEF …Run Code Online (Sandbox Code Playgroud) 我@font-face在CSS 中遇到了麻烦.我使用的字体在每个浏览器中看起来都非常不同.
在Firefox中查看此示例:

在Chrome中:

我不知道是什么原因引起了这个问题.我已经尝试使用text-rendering,我也尝试url在@font-face声明中更改-properties 的顺序.
我使用的是Windows 7 Professional和Firefox V30.
有人可以告诉我这个问题的原因,并告诉我如何解决它?
非常感谢.
//编辑:这是@font-face我正在使用的声明:
@font-face {
font-family: 'MyFont';
src: url('myFont.eot');
src: url('myFont.eot?#iefix') format('embedded-opentype'),
url('myFont.svg#myfont') format('svg'),
url('myFont.woff') format('woff'),
url('myFont.ttf') format('truetype');
font-style: normal;
font-weight : normal;
}
Run Code Online (Sandbox Code Playgroud)
正如我上面所写,我已经按照这个命令的顺序玩了.
在我的特定问题中,您可以看到此页面(页脚)显示问题.
过去几年我们一直在Web应用程序中使用ASAP字体而没有任何问题.突然间,我们开始使用'ASAP'谷歌字体注意畸形.它们仅在使用字体呈现<16px字体大小时发生."Ubuntu"字体也出现了同样的问题.
有谁知道造成这些问题的原因是什么?
我们已经注意到这些问题:操作系统的Win10,MacOS上的IE11,最新的Chrome,Edge,Firefox,Safari.