我正在使用桌面Java应用程序,并且已经使用JDK 6通过IDE进行开发.我使用渲染提示VALUE_FRACTIONALMETRICS_ON和其他提示来更好地渲染JLabel中的文本.这些提示在JVM 1.6上运行得非常漂亮,但我最近注意到,VALUE_FRACTIONALMETRICS_ON当我使用JRE运行应用程序时,它似乎完全忽略了1.7我在这里做错了什么让Java 7忽略了这些提示?
lblDate = new ATimeLabel(ATimeLabel.DATE_LETTERS) {
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
super.paintComponent(g2d);
}
};
Run Code Online (Sandbox Code Playgroud)
FRACTIONALMETRICS对文本具有最明显的视觉效果,因此让我的工作就是我想要做的.
这是一个屏幕截图比较,当我从我的IDE(左)运行应用程序时使用Java 6,当我双击Jar文件时,它自己(右)使用我的系统JRE,Java 7.(我还临时添加红色边框以显示paint方法确实有效)
任何帮助将非常感谢.
有没有办法在窗体中获得更好的文本渲染质量.
我试过玩"TextRenderingHint",但没用.
字体为Helvetica Neue LT Pro,在photoshop中创建的所需结果显示在附加图像的左侧.我使用.otf文件作为资源在.NET中引入它.

我试图在矩形内的多行上绘制椭圆化文本.
因为NSLineBreakByTruncatingTail,文件说明
显示该行,以便开头适合容器,行末尾的缺失文本由省略号字符表示.虽然此模式适用于多行文本,但它更常用于单行文本.
但是使用那种模式我只得到一行:

但是NSLineBreakByWordWrapping,我没有获得超长文本的省略号:

两张图片使用相同的代码(红色背景是文本绘制矩形),当然是相同的矩形大小,所以2行应该绝对适合.
NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = <<see above>>;
paragraphStyle.alignment = NSTextAlignmentNatural;
NSDictionary* drawingAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"HelveticaNeue" size:36],
NSFontAttributeName,
paragraphStyle,
NSParagraphStyleAttributeName,
nil];
const CGRect rect = CGRectMake(...);
[@"I do not get ellipsized in any way" drawInRect:rect withAttributes:drawingAttributes];
Run Code Online (Sandbox Code Playgroud)
有没有办法将椭圆化和多线渲染结合起来,正如文档所说的那样?使用UILabel,我只需要将行数设置为1以外的值,但是通过代码进行文本渲染呢?
我开始使用Perl,并且对于如何在给定十六进制字符串变量的情况下呈现unicode字符感到困惑.
#!/usr/bin/perl
use warnings;
foreach my $i (0..10000) {
my $hex = sprintf("%X", $i);
print("unicode of $i is \x{$hex}\n");
}
print("\x{2620}\n");
print("\x{BEEF}\n");
Run Code Online (Sandbox Code Playgroud)
给我警告: Illegal hexadecimal digit '$' ignored at perl.pl line 9.
没有值打印 \x{$hex}
我一直认为,就不同平台上的主要浏览器的呈现而言,唯一的区别是操作系统的底层字体呈现技术,其他一切依赖于浏览器中包含的相同库.
就我的研究而言,这是前端开发人员相信或不相信的事情.看来我们也可以选择.我处在一个糟糕的地方,因为我一直认为没有区别,现在我被告知,在我发布任何影响前端的工作之前,我必须在Mac和Windows上进行彻底的测试.
要清楚,我知道文本呈现的差异(Tom Phiney在这里深入讨论了这个问题:http://www.thomasphinney.com/2009/12/browser-choice-vs-font-rendering/).我找不到任何文件的灰色区域是否有任何差异.
是否存在任何技术性权威的权威文章,无论如何都给出了明确的答案?
operating-system cross-browser rendering-engine text-rendering
如果我对文本应用旋转,它将不会在Firefox和Chrome中呈现消除锯齿(仅在Windows中),但它在IE中正确呈现.此外,它在Mac OS X中的Chrome和Firefox中正确呈现.
以下是比较Windows 8中三个浏览器的屏幕截图:
上面的CSS转换很简单
transform: rotate(-1.5deg) translateY(-2px);
Run Code Online (Sandbox Code Playgroud)
这是一个小提琴:
有任何想法吗?
我正在尝试在 HTML5 画布上绘制 8 位像素文本。我试过了:
_context['imageSmoothingEnabled'] = false;
_context['mozImageSmoothingEnabled'] = false;
_context['oImageSmoothingEnabled'] = false;
_context['webkitImageSmoothingEnabled'] = false;
_context['msImageSmoothingEnabled'] = false;
Run Code Online (Sandbox Code Playgroud)
以及其他一些与 HTML 和 CSS 字体有关的事情,同时谷歌搜索了一个多小时。这是字体:
@font-face {
font-family: "undertalefont";
src: url("bitops.ttf");
font-style: normal;
-webkit-font-smoothing: none;
}
Run Code Online (Sandbox Code Playgroud)
当在 HTML 中使用它时,它会尝试使用奇怪形式的子像素抗锯齿。它可以按照图像编辑程序中的预期呈现字体。
所以我的问题是,我该如何阻止这个...(缩放到 200% 以查看坏的 AA)
并使其像素完美清晰?
编辑:我正在渲染文本:
_context.fillStyle = "white";
_context.font = "24px 'undertalefont'";
_context.fillText("Font rendering.", 32, 20);
Run Code Online (Sandbox Code Playgroud) 因为几周前我的 chrome 使谷歌字体“open sans”变得糟糕,关于 firefox,它总是让它变得糟糕,
它在所有开放 sans 和任何重量或大小的网站中都变得糟糕。我已经阅读了一些关于更改 chrome://flags/#enable-direct-write 的内容,但我没有那个选项我已经清理了缓存,
我有一个屏幕截图,显示了它在我的屏幕上的外观和下面它应该是什么样子,
该屏幕截图取自此处:http : //104.236.102.187/htmls/open/open.html
目前chrome的版本是52,windows 8.1 pro
64位
谢谢
我面临的问题是,我有一个<span>包含多行文本且具有透明背景的内联文本。尽管有默认的行高,但文本上的背景重叠,导致背景覆盖在其自身上的较暗的水平行。
HTML:
<h1>
<span>Although it is set to a line height of 1, the background behind text still overlaps between rows.</span>
</h1>
Run Code Online (Sandbox Code Playgroud)
CSS:
h1 {
text-transform: uppercase;
font-family: Arial;
line-height: 1;
font-size: 30px;
background: rgba(0,0,0,0.5);
color: #FFF;
display: inline;
}
h1 span {
position: relative;
}
Run Code Online (Sandbox Code Playgroud)
span为display:inline-block不是一个可行的解决方案。line-height(或padding)并不是最佳答案,因为确切的字体渲染在浏览器和用户设置之间会发生变化。line-height例如,在 Chrome 中设置完美会在 Firefox 中产生不完美的结果。padding添加或删除以减少或增加文本与背景边缘之间的空间。我正在尝试向我的 Chrome 扩展程序\xe2\x80\x99s 徽章文本添加一个重复选标记 ( \xe2\x9c\x94 )。当我从后台脚本更新徽章时,它工作正常。当我从弹出窗口中的脚本更新它时,它呈现为\xc3\xa2\xc5\x93\xe2\x80\x9d.
chrome.browserAction.setBadgeText({\n text: \'\xe2\x9c\x94\',\n tabId: tabId\n});\nRun Code Online (Sandbox Code Playgroud)\n javascript unicode google-chrome text-rendering google-chrome-extension