C#:与浏览器中呈现的文本匹配的像素宽度

本文关键字:文本 像素 浏览器 | 更新日期: 2023-09-27 18:31:25

如果在我正在创建的工具中使用特定字体(Arial 18px)的C#在Chrome中呈现文本,我正在尝试估计像素的宽度。

将我的结果与此工具进行比较(使用浏览器渲染宽度):http://searchwilderness.com/tools/pixel-length/字符串:

"Lorem ipsum dolor sit amet, consectetur adipiscing elit."

计算为 439 像素宽。

但是在 C# 中使用此代码,我得到 445px:

var font = new Font("Arial", 18, FontStyle.Regular, GraphicsUnit.Pixel);
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
var size = TextRenderer.MeasureText(text, font, new Size(int.MaxValue, int.MaxValue), TextFormatFlags.NoPadding);

我可以修改我的代码,使其呈现类似于浏览器吗?

我尝试输出带有字体和文本的标签,并与浏览器渲染相比,它们确实匹配(+/- 1px)。

C#:与浏览器中呈现的文本匹配的像素宽度

可以改用 GDI+ 和StringFormat.GenericTypographic

var font = new System.Drawing.Font("Arial", 18, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
var graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero);
var size = graphics.MeasureString(text, font, int.MaxValue, System.Drawing.StringFormat.GenericTypographic);

另请参阅:https://stackoverflow.com/a/6404811

最万无一失的方法是构建客户端渲染的字符宽度数据库。它远非微不足道,测量每种独特字体、变体(粗体/斜体)、大小、缩放因子、浏览器和平台的所有字符。

为了避免这种情况,在客户端执行渲染逻辑可能更明智,其中可以使用等效的 getTextWidth() 找到实际值。