网站字体渲染过程

news/2024/5/14 13:02:49/文章来源:https://blog.csdn.net/weixin_33862188/article/details/90650121
{0D397153-FBC5-4E04-9FBC-150F2BE902FB}

前言

我们知道同一种字体在不同浏览器上的表现有可能是不同的,除了浏览器,还有哪些导致表现不同的因素呢?不同系统下字形的渲染也是不一样的,根本原因是什么呢?我们希望各浏览器下字体排版一致,实现的话有完美的方案吗?

带着这些问题我们来看看字体渲染的过程:

解码

了解解码之前,我们稍微先简单回顾下编码的一些知识,常见的名词有:ASCII 、GB2312、Big5、Unicode、UTF-8,它们之前有什么区别或联系呢?简单来说,起初美国国家标准协会ANSI制定了一个标准,规定了常用字符的集合以及每个字符对应的编号,这就是ASCII字符集(Character Set),也称ASCII码,当计算机慢慢发展,人们发现之前的128个的字符不能满足需求了,于是便在原基础上进行扩展,GB2312、Big5等都属于扩展后的编码方式,再后来呢,为了实现在一份文档中可以正确显示所有类型的字符,于是Unicode字符集诞生了,而UTF-8是Unicode的实现方式之一, 与之相似的还有UTF-16和UTF-32。

回顾了编码,我们再来看解码,浏览器收到网页内容后,首先需要把这些内容转化为可阅读的文本,上面我们也提到了,不同国家或语言会使用不同的编码方式,那怎么去判断编码方式呢,方法有下面这些(优先匹配前面的规则,如果没有,则按顺序往下匹配):

  1. Web 服务器返回的 HTTP 头中的 Content-Type: text/html; charset=“”的编码
  2. 网页本身 meta header 中的 charset 部分
  3. 浏览器菜单里一般允许用户强制指定编码
  4. 部分浏览器 (比如 Firefox) 可以选择编码自动检测功能,使用基于统计的方法判断未定编码。

分段

编码方式确定后,网页的内容就被转化为Unicode字符了,分段的过程就是将文本分为由不同语言组成的小段.

选择字体

下面我们来谈谈字体,字体的分类大致有下面这些:
1. 点阵字体(Bitmap Fonts)
2. 轮廓字体(Outline Font)
2-1. PostScript字体
2-2. TrueType字体
2-3. OpenType字体
3.笔画字体(Stroke-based font)
4.METAFONT

如何理解点阵字体和轮廓字体的区别呢,其实它们的表现和图片格式中的png8和png24的的区别很类似,点阵字体都是实色,没有过渡色,边缘锐利,而轮廓字体有过渡色,边缘也比较平滑。很多人把“宋体”(simsun)当作点阵字体,其实不是,它和“微软雅黑”(microsoft yahei)一样,都属于轮廓字体,只不多12px~17px的宋体内置了点阵信息而已。

如果按照字形来分的话,字体又可以分为:

  • 衬线(serif)
  • 非衬线(sans-serif)
  • 等宽字体(monospace )
  • 书写体(cursive)
  • 梦幻体(fantasy)

注:其中“serif”表示”字脚”、“装饰”的意思,而“sans”来源于法语,是“无”的意思。

常见的衬线有下面这些,字形的末端都会有“脚”:
font_1
常见的非衬线有:
font_2

而系统所包含哪些字体跟什么有关呢?当我们想用一种字体,但不确认这个字体是否是系统已有的,怎么去确认呢?

首先系统所包含字体不只和系统预装的字体有关,还和系统上安装哪些软件有关,微软操作系统下,详细的系统和一些软件包含的字体可以查看这个索引:Microsoft typography,Mac系统可以查看这个索引:List of typefaces included with OS X

再让我们回到网页中,CSS里如果font-family未设置中文字体时,我们知道是根据浏览器默认的字体来显示,找到浏览器对应的设置,你也可以手动修改这些。

1
p{font:12px/24px Tahoma;}
2
p{font:12px/24px Arial;}

以上两种写法按照前面我们所说的规则来说,在同一个系统和浏览器中匹配的是唯一的字体,那么它们的显示还会有区别吗?看看下面Windows系统下部分浏览器的测试结果:

windows下浏览器渲染

仔细看,你会发现IE6,IE8,Chrome,Firefox下文字底部不在同一水平线上的。所以由此得知:英文字体不会影响中文的字形,但会影响其位置。可是…为什么会影响位置呢?我们再来看下网页中的文字的位置到底是怎么被控制的:

字体渲染

默认的规则是:用行高(line-height)减去内容区(content area)的高度所得到的值一分为二,各放在内容区的上面和下面,但不同浏览器的渲染不同,并且结合上面的测试结果,就算内容区的位置是相同的,文字在内容区的位置还可能不同。
而影响文字在内容区的位置的因素有下面几个,也就是说这也不是统一的。

  • 字体类型
  • 排版引擎
  • 浏览器

排版引擎

总的来说,Mac OS X用户使用CoreText渲染引擎,Windows7 和Windows Vista用户使用DirectWrite 或 GDI,而Windows XP则使用GDI.
对比图片来看看它们之间的区别,其中上图为FacitWeb字体,下图为 Minion Pro字体。

bove: Core Text rendering of FacitWeb (above) and Minion Pro (below).

Core Text 渲染引擎

Above: DirectWrite rendering of FacitWeb (above) and Minion Pro (below).

DirectWrite渲染引擎

Above: GDI rendering of FacitWeb (above) and Minion Pro (below) with ClearType enabled.

GDI渲染引擎,开启ClearType

Above: GDI rendering of FacitWeb (above) and Minion Pro (below) with Standard antialiasing.

GDI渲染引擎,标准抗锯齿(Standard antialiasing)

Above: GDI rendering of FacitWeb (above) and Minion Pro (below) with no antialiasing.

GDI渲染引擎,无抗锯齿(no antialiasing)

注:iOS和Mac的渲染引擎一样,但采用的是灰度渲染,默认情况下亚像素抗锯齿是关闭的,但可以通知设置开启。

所以不同系统因为渲染引擎的不同,导致文字在细节上也表现不同,在这里顺便说下微软和苹果两家公司对于字体表现的不同风格,苹果公司更专注于还原字形设计的本来面貌,使字形更优雅、平滑。而微软则更倾向字体的清晰,可读性。

浏览器

确认了排版引擎,我们再来看看浏览器,浏览器会有布局引擎,它来决定是怎样用html结构,css样式表来你渲染网页。布局引擎和网站外观表现是息息相关的,但是对于字形渲染,绝大部分还是由操作系统的文本渲染引擎来控制的,这就很好的解释了为什么同样的浏览器,在不同的操作系统下有不同的字形表现,见下图:

Windows下各浏览器所使用的渲染模式。

Windows下各浏览器所使用的渲染模式。

光栅化

当确定了编码、字体类型、排版引擎、浏览器后,就要进行光栅化过程了,光栅化是将文字从一个向量表示(比如一个TrueType字体)转化到光栅或者位图表示的过程。在这个过程中往往涉及到一些抗锯齿技术来使得屏幕上的字体更加平滑易读,这也经常会涉及到”字体微调(font hinting)”技术。

总结

现在再回过头来说说研究字体渲染的初衷,细节控对于不同浏览器像素级统一有时候要求是很极致,研究的目的是想做出一套方法来实现它们的统一。可现在我们知道,这和字体类型、系统排版引擎、浏览器都有关系,并且排版引擎有多种,这里还没有加上Linux,Android系统,浏览器就更不用说了,如果再加上移动端,就更复杂了。所以完美的方案是近乎没有的,就算写一大堆的hack。

如果再跳出来看这个问题,我们真的一定需要让不同浏览器在字体渲染方面的表现完美一致吗,其实普通的用户不是专门测试人员,不会打开所有浏览器对比区别,所以细微的差别对普通用户来说几乎是无法感知的,是的,我这里说的是“细微”,但是如果差别比较离谱,这些导致表现不同的原因都不会成为借口。

注:头图来自 http://www.gettyimages.cn/

参考资料:

  • http://blog.jjgod.org/2011/04/09/how-do-browsers-render-text/
  • http://jjgod.org/docs/slides/TextRenderingWithQt.pdf
  • http://blog.typekit.com/2010/10/05/type-rendering-on-the-web/
  • http://blog.typekit.com/2010/10/15/type-rendering-operating-systems/
  • http://blog.typekit.com/2010/10/21/type-rendering-web-browsers/
  • http://blog.typekit.com/2010/11/09/type-rendering-the-design-of-fonts-for-the-web/
  • http://blog.typekit.com/2010/12/08/type-rendering-font-outlines-and-file-formats/
  • http://blog.typekit.com/2010/12/14/a-closer-look-at-truetype-hinting/
  • http://blog.csdn.net/easebone/article/details/7382633
  • http://zh.wikipedia.org/wiki/%E7%94%B5%E8%84%91%E5%AD%97%E4%BD%93

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_826878.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何提升网站权重

2019独角兽企业重金招聘Python工程师标准>>> 如何提升网站权重 1、 在权重高的论坛发帖 就是在高权重的论坛里面发帖,发帖的时分要在帖子中参加关键词和链接地址,当你的帖子发送胜利后,由于你发布的论坛权重很高。所以会直接影响到…

技术网站 -- centos

2019独角兽企业重金招聘Python工程师标准>>> centos中文站 http://www.centoscn.com/ 转载于:https://my.oschina.net/u/2312022/blog/648410

Burpsuite1.7.03网站渗透神器最新破解版

众所周知,Burp Suite是响当当的web应用程序渗透测试集成平台。从应用程序攻击表面的最初映射和分析, 到寻找和利用安全漏洞等过程,所有工具为支持整体测试程序而无缝地在一起工作。 平台中所有工具共享同一robust框架,以便统一处理…

秦时明月主题 html静态网站 全套源码资源

这是我上学期写的一个静态的html网站。 细节方面没深入写,只是写了一个表面的网站,适合萌新练习。 展示如下: 下载地址:https://download.csdn.net/download/k_koris/10714671

织梦网站上传到服务器(与网上常见方法不同)

最近需要将通过织梦写的网站上传到服务器,试了许多网上的方法都不太适合我,经过一番尝试,用自己的方法解决了这个问题,特此记录。另外,我的本地织梦是利用xampp搭建的,服务器是linux,使用window…

OpenCms创建网站过程图解——献给OpenCms的初学者们

很多人都听说了OpenCms,知道了它的强大,索性的下载安装了,终于见到了久违OpenCms,看到了它简洁的界面,欣喜过后却不免一脸茫然,这个东西怎么用,我怎么用它来建站,从哪开始&#xff0…

Win7如何安装IIS来浏览ASP网站

1 进入控制面板-->程序与功能-->点击左侧的"打开或关闭Windows功能"-->把"Internet信息服务"给勾上,点击"确定"后开始安装.(注意只要框子显示为蓝色即可,无法显示勾子)2 还是在"打开或关闭Windows功能"里面,再次安装IIS功能,…

ASP.NET Core 一步步搭建个人网站(4)_主页和登录验证

上章节我们已经定制好动态配置的菜单,用户登录网站的第一步就是进入首页内容,那我们先搭建一下我们的首页内容。想着自己的网站内容主要是个人博客类型,所以,首页就展示博主本人的一些基本信息吧,哈哈。当然&#xff0…

如何利用新媒体平台,优化个人网站!

现阶段你如果和一些新入行的营销人员谈论SEO,他们可能并不了解,虽然SEO有着悠久的历史,但当你与他们谈论新媒体的时候,几乎每个人都会有独到的见解。 随着新媒体的不断崛起与影响力的不断攀升,很多人都在唱衰SEO&#…

支持全球探测点的新一代网站监控

摘要: 当你的网站开发完成了,你是不是想知道全国各地到服务器的网络访问情况。 当你的网站上线了,你是不是不想变成熊猫眼24小时盯着网站运行情况。 当你的网站商业化了,你是不是想对竞争对手的应用也做做监测,看看谁更…

搭建开放式与认证式个人网站

搭建开放式与认证式个人网站 (一).设置个人用户主页 开启个人用户主页功能; 【vim /etc/httpd/conf.d/userdir.conf】 编辑/etc/httpd/conf.d/userdir.conf文件,在第17行的UserDir disabled参数前面加上井号&#xff…

DNS设置错误,浏览器能够正常访问网站么?

大家在看到这个问题,第一反应是不是都认为:不能? 嘿嘿,我料定大家的正常思路也该是这样。 起初我也认为应该是这样但是前段时间遇到一件事让我改变了这个固有观念: 前段时间机房的dhcp服务关闭,我们不得已开…

css点击后变颜色_Web 性能优化:21 种优化 CSS 和加快网站速度的方法

这是 Web 性能优化的第 4 篇,上一篇在下面看点击查看:Web 性能优化:使用 Webpack 分离数据的正确方法Web 性能优化:图片优化让网站大小减少 62%Web 性能优化:缓存 React 事件来提高性能CSS 必须通过一个相对复杂的管道…

外链发布,如何一箭双雕,而非仅仅为了SEO?

目前,我们不可否认的是社交媒体对SEO的影响,特别是新媒体平台,很多比较成熟的公司都会在原有的SEO部门增加新媒体部,这就意味着,基础性的营销推广,不单单存在于SEO,以往通过SEO获取大量流量的操…

记录 OpenGL 学习网站

LearnOpenGL CNhttp://learnopengl.com 系列教程的简体中文翻译https://learnopengl-cn.github.io/http://learnopengl.com 系列教程的简体中文翻译https://learnopengl-cn.github.io/ OpenGL入门(一)-- 图形API简介与作用 - 简书由于第一次的文章排版有…

如何处理 网站被网安大队下发的信息系统安全等级保护限期整改通知书

2018年6月,我们接到一位来自北京的新客户反映,说是他们单位收到一封来自北京市公安局海淀分局网安大队的通知书,通知称:贵单位网站存在网络安全漏洞,网站被植入后门程序,要求你单位要在XX日之前,对网站进行…

社交媒体(social media)网站设计尺寸参考(转)

社交媒体网站,这里主要指的是国外的几大网站,比如说:Facebook、Twitter、Google、LinkedIN、Pinterest、Instagram和Youtube七个。今天不说别的,主要将其设计图尺寸发于大家参考,希望这这几张图对设计人员有所帮助。 社…

网站快照被劫持 标题描述被篡改成博彩内容的解决方法

三年前用dedecms织梦系统,帮公司设计了一个网站,平常的网站更新,以及优化也都是我在负责,前段时间发现网站的流量越来越少,用爱站站长工具查看了一下,竟然发现网站快照被劫持了,网站快照标题和实…

初创企业没网站,如何利用SEO推广?

在日常工作中,我们经常会遇到一些初创的企业,由于刚刚成立而没有建立自有网站,但这个时候,仍然有业务需要配合线上推广。 那么,初创企业没网站,如何利用SEO推广? 根据以往的SEO工作经验&#…

企业网站建设前所需的准备哪些?

目前,在仍有不少传统的企业想建设自已的网站,可是大多数却不知道网站建设的具体流程和一些建站的物料准备工作。所以,今天搜客建设网站公司小编就和大家谈一谈网站建设前所需的准备物料。 一、网站建设流程 第1步:域名注册 任何…