CN116362202B - 字体生成方法、存储介质及电子设备 - Google Patents
字体生成方法、存储介质及电子设备 Download PDFInfo
- Publication number
- CN116362202B CN116362202B CN202310640884.6A CN202310640884A CN116362202B CN 116362202 B CN116362202 B CN 116362202B CN 202310640884 A CN202310640884 A CN 202310640884A CN 116362202 B CN116362202 B CN 116362202B
- Authority
- CN
- China
- Prior art keywords
- point set
- font
- appearance
- point
- ttf
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 238000004590 computer program Methods 0.000 claims description 6
- 238000009877 rendering Methods 0.000 abstract description 13
- 238000004458 analytical method Methods 0.000 abstract description 6
- 230000000694 effects Effects 0.000 abstract description 4
- 238000012545 processing Methods 0.000 abstract description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000002715 modification method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000009966 trimming Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/103—Formatting, i.e. changing of presentation of documents
- G06F40/109—Font handling; Temporal or kinetic typography
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/60—Editing figures and text; Combining figures or text
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
本发明特别涉及一种字体生成方法、存储介质及电子设备,其中一种字体生成方法,包括如下步骤:对ttf格式的字体文件进行解析得到字符的第一外形点集;对第一外形点集进行偏移得到变形后字符的第二外形点集;根据第二外形点集对相交的闭合区域进行合并得到第三外形点集;将第三外形点集转换成svg_path数据;对svg_path数据进行绘制后再进行ttf生成,得到变形后的ttf格式的字体文件。直接解析得到第一外形点集的坐标信息解析时非常准确,不会错误;对相交的闭合区域进行合并避免区域渲染出错的情况,后续的一系列处理避免了字符渲染时出错的问题,经过上述步骤得到的新字体文件,渲染效果正常,使用起来更加可靠。
Description
技术领域
本发明涉及字体设计技术领域,特别涉及一种字体生成方法、存储介质及电子设备。
背景技术
字体水印是一种文本水印技术,可以将特定水印信息(名称、ID等)编码后隐藏在组成文档的字形中,最后可用特定程序提取水印信息。嵌入信息后的文档看上去不会有明显变化,但是实际上文档已经被嵌入了唯一的水印信息,这样可以在不破坏原始文档内容且不被人察觉的情况下,实现文本内容的版权防护与泄密溯源。
目前有两种字体水印相关的技术方案,第一种方案主要通过人工微调目标字体来生成多个相似的字体并制作成专有字库,在嵌入端通过选择不同的字体变形来表达不同的水印信息。这些字体在人眼观看时几乎没有不同,但在提取端可以通过图像匹配的方式进行识别,从而提取出水印信息。该方案的缺陷在于需要投入大量的人工和时间成本来设计字库;同时,由于使用单个字形的变化表示信息,该方案的鲁棒性较弱,在截屏、压缩、纸质文档拍照、屏幕文档拍照等常见场景下无法成功提取水印信息。
另一种方案通过字形流图半自动地生成目标字体的相似字体,然后对每一个字形的不同变体训练分类网络来提取信息。该方案可以半自动生成字库,相比于第一种方案节省了人力成本。但是,由于对每个字形都要训练对应的分类网络,该方案只适用于字形种类较少的语言(如英文),并且只能用于字号较大的场景(如海报)。
不论何种方案,其均会涉及字体格式转换的问题,即现将ttf格式的字体文件转换成svg或图片等格式,再对字符进行变形,变形后再生成ttf格式。现有再用的众多ttf生成方法,存在各种无法使用的情况,比如:nodejs中svg和ttf互相转换,生成的ttf无法渲染;fontforge使用importOutlines添加单个字符svg至模板ttf中使用后存在字符间距变大、竖排字符堆叠等渲染问题。
发明内容
本发明的目的在于提供一种字体生成方法,避免ttf格式文件在转换和生成过程中出现渲染出错的情况。
为实现以上目的,本发明采用的技术方案为:一种字体生成方法,包括如下步骤:对ttf格式的字体文件进行解析得到字符的第一外形点集,第一外形点集由字形数据点和二次贝塞尔曲线控制点构成;对第一外形点集进行偏移得到变形后字符的第二外形点集;根据第二外形点集对相交的闭合区域进行合并得到第三外形点集;将第三外形点集转换成svg_path数据,并在每个外形轮廓的开始和结束位置分别添加move和close信息;对svg_path数据进行绘制后再进行ttf生成,得到变形后的ttf格式的字体文件。
与现有技术相比,本发明存在以下技术效果:通过直接解析得到第一外形点集,这些外形点集的坐标信息解析时非常准确,不会错误;在对字符进行变形的时候,也是针对这些数据点或控制点进行的;偏移以后,通过对相交的闭合区域进行合并避免区域渲染出错的情况,同时,经过后续的一系列处理,避免了字符渲染时出错的问题,经过上述步骤得到的新字体文件,渲染效果正常,使用起来更加可靠。
附图说明
图1是本发明的流程示意图。
具体实施方式
下面结合图1,对本发明做进一步详细叙述。
参阅图1,本发明公开了一种字体生成方法,包括如下步骤:对ttf格式的字体文件进行解析得到字符的第一外形点集,第一外形点集由字形数据点和二次贝塞尔曲线控制点构成;有很多第三方库可以将ttf字体文件解析成第一外形点集,比如使用glyph模块的foreground方法,具体来说,先根据字符的unicode编码生成该字符glyph对象:glyph=font[unicode];然后调用glyph模块的foreground方法获取字符的第一外形点集;下面是一个字符的第一外形点集示例:
<Layer(quadratic)
<Contour
(73,83) on
(92,85) off
(119,89) on
(119,137) on
(82,133) off
(68,131) on
(70,107) off
(73,83) on
>
<Contour
(181,97) on
(184,115) off
(184.5,126) on
……
>
>
在上述第一外形点集数据中,包括多个外形轮廓,每个Contour即对应一个外形轮廓,每个外形轮廓由多个点坐标以及点坐标对应的标识符构成,标识符为on的为数据点,标识符为off的为控制点。比如上述示例中的第一个外形轮廓,其起点坐标为(73,83),点(73,83)和点(119,89)之间是二阶贝塞尔曲线且该曲线的控制点坐标为(92,85),点(119,89)和点(119,137)之间是直线,以此类推。
当我们获得第一外形点集后,就可以参考已有的方案对其进行变形,最常见的是通过对关键点的偏移来实现字符的变形,即:对第一外形点集进行偏移得到变形后字符的第二外形点集;具体的变形方案,可参考我司已申请的专利《可视化的字符变形方法及系统》(公开号:CN114385983A)、《基于全字符变换的字符变形方法及系统》(公告号:CN114117366B)或现有技术中已公开的其他方案,此处不再赘述。
进一步地,根据第二外形点集对相交的闭合区域进行合并得到第三外形点集;由于上述生成第一外形点集的时候对根据字符的笔划生成了多个外形轮廓,这些外形轮廓具有重叠区域,在生成ttf字体文件时,这种重叠区域会产生渲染出错的情况,因此这里对相交的闭合区域进行合并,使得合并得到的第三外形点集中包含的多个外形轮廓之间不再有相交区域。
优选地,所述的根据第二外形点集对相交的闭合区域进行合并得到第三外形点集包括:计算任意两个闭合区域的交点,计算交点时,我们可以先将二阶贝塞尔曲线等分成若干线段的组合,以方便交点的计算;若存在四个交点,则删除四点闭合区域,若存在两个交点,则删除延长线方向可相交区域;根据删除后的区域得到第三外形点集,详细来说,我们会根据交点所处的位置来判断,如果交点处于直线上,我们会重新定义线段的起点和终点,如果交点处于二阶贝塞尔曲线上,我们会删除原控制点,重新定义二阶贝塞尔曲线的起点和终点,并拟合计算出新的控制点。
将第三外形点集转换成svg_path数据,并在每个外形轮廓的开始和结束位置分别添加move和close信息;之所以添加move和close信息,是为了后面生成ttf格式文件时,准确的进行绘制,避免渲染出错。本实施例中具体地,通过如下步骤将第三外形点集转换成svg_path数据:依次遍历第三外形点集的坐标;若当前坐标为某个外形轮廓的首个坐标,则在Path中添加Move(to=(当前坐标));若当前坐标为某个外形轮廓的最后一个坐标,则在Path中添加Close(start=(当前坐标),end=(当前坐标));否则进入下一步;若当前坐标对应的标识符为on,则在Path中添加Line(start=(当前坐标),end=(下一个坐标));若当前坐标对应的标识符为off,则在Path中添加QuadraticBezier(start=(上一个坐标),control=(当前坐标),end=(下一个坐标),smooth=False)。
由于第二外形点集、第三外形点集的数据形式与第一外形点集的数据形式相同,因此我们这里以前面的第一外形点集为例,将其转换成svg_path数据后得到:
Path(
Move(to=(73+83j)),
QuadraticBezier(start=(73+83j),control=(92+85j),end=(119+89j),smooth=False),
Line(start=(119+89j),end=(119+137j)),
QuadraticBezier(start=(119+137j),control=(82+133j),end=(68+131j),smooth=False),
QuadraticBezier(start=(68+131j),control=(70+107j),end=(73+83j),smooth=False),
Close(start=(73+83j),end=(73+83j)),
Move(to=(181+97j)),
...),注意,这个数据中,每一个闭合区域必须有move和close信息,且坐标相同。
最后,我们对svg_path数据进行绘制后再进行ttf生成,即可得到变形后的ttf格式的字体文件。具体地,利用glyph模块的glyphPen方法,根据字符的unicode编码生成pen对象:pen=font[unicode].glyphPen();再根据pen对象的moveTo、lineTo、qCurveTo、endPath方法对svg_path数据进行绘制,其中pen.moveTo()用于绘制起点,pen.lineTo()用于绘制直线,pen.qCurveTo()用于绘制二阶贝塞尔曲线,pen.endPath()用于绘制终点。完成绘制后,上述unicode对应的字符已经实现了重新绘制,我们再利用glyph模块里font对象的generate方法进行ttf生成:font.generate(output_ttf_path),这里的output_ttf_path是新生成的ttf格式文件的存储路径。此时就完成了ttf格式文件的修改。
通过直接解析得到第一外形点集,这些外形点集的坐标信息解析时非常准确,不会错误;在对字符进行变形的时候,也是针对这些数据点或控制点进行的;偏移以后,通过对相交的闭合区域进行合并避免区域渲染出错的情况,同时,经过后续的一系列处理,避免了字符渲染时出错的问题,经过上述步骤得到的新字体文件,渲染效果正常,使用起来更加可靠。
本发明还公开了一种计算机可读存储介质和一种电子设备。其中,一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如前所述的字体生成方法。一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序时,实现如前所述的字体生成方法。
Claims (7)
1.一种字体生成方法,其特征在于:包括如下步骤:
对ttf格式的字体文件进行解析得到字符的第一外形点集,第一外形点集由字形数据点和二次贝塞尔曲线控制点构成;
对第一外形点集进行偏移得到变形后字符的第二外形点集;
根据第二外形点集对相交的闭合区域进行合并得到第三外形点集;
将第三外形点集转换成svg_path数据,并在每个外形轮廓的开始和结束位置分别添加move和close信息;
对svg_path数据进行绘制后再进行ttf生成,得到变形后的ttf格式的字体文件;
所述的根据第二外形点集对相交的闭合区域进行合并得到第三外形点集包括:
计算任意两个闭合区域的交点;计算交点时,将二阶贝塞尔曲线等分成若干线段的组合;如果交点处于直线上,重新定义线段的起点和终点;如果交点处于二阶贝塞尔曲线上,删除原控制点,重新定义二阶贝塞尔曲线的起点和终点,并拟合计算出新的控制点;
若存在四个交点,则删除四点闭合区域,若存在两个交点,则删除延长线方向可相交区域;
根据删除后的区域得到第三外形点集。
2.如权利要求1所述的字体生成方法,其特征在于:所述的对ttf格式的字体文件进行解析得到字符的第一外形点集步骤包括:
根据字符的unicode编码生成该字符glyph对象;
调用glyph模块的foreground方法获取字符的第一外形点集;
第一外形点集包括多个外形轮廓,每个外形轮廓由多个点坐标以及点坐标对应的标识符构成,标识符为on的为数据点,标识符为off的为控制点。
3.如权利要求2所述的字体生成方法,其特征在于:所述的将第三外形点集转换成svg_path数据,并在每个外形轮廓的开始和结束位置分别添加move和close信息包括:
依次遍历第三外形点集的坐标;
若当前坐标为某个外形轮廓的首个坐标,则在Path中添加Move(to=(当前坐标));若当前坐标为某个外形轮廓的最后一个坐标,则在Path中添加Close(start=(当前坐标),end=(当前坐标));否则进入下一步;
若当前坐标对应的标识符为on,则在Path中添加Line(start=(当前坐标),end=(下一个坐标));若当前坐标对应的标识符为off,则在Path中添加QuadraticBezier(start=(上一个坐标),control=(当前坐标),end=(下一个坐标),smooth=False)。
4.如权利要求1所述的字体生成方法,其特征在于:所述的对svg_path数据进行绘制的步骤中:
利用glyph模块的glyphPen方法,根据字符的unicode编码生成pen对象;
再根据pen对象的moveTo、lineTo、qCurveTo、endPath方法对svg_path数据进行绘制。
5.如权利要求4所述的字体生成方法,其特征在于:所述的对svg_path数据进行绘制后再进行ttf生成的步骤中,是利用glyph模块里font对象的generate方法进行ttf生成的。
6.一种计算机可读存储介质,其特征在于:其上存储有计算机程序,所述计算机程序被处理器执行时,实现如权利要求1-5中任一项所述的字体生成方法。
7.一种电子设备,其特征在于:包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-5中任一项所述的字体生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310640884.6A CN116362202B (zh) | 2023-06-01 | 2023-06-01 | 字体生成方法、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310640884.6A CN116362202B (zh) | 2023-06-01 | 2023-06-01 | 字体生成方法、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116362202A CN116362202A (zh) | 2023-06-30 |
CN116362202B true CN116362202B (zh) | 2023-08-11 |
Family
ID=86913402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310640884.6A Active CN116362202B (zh) | 2023-06-01 | 2023-06-01 | 字体生成方法、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116362202B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101604452A (zh) * | 2008-06-13 | 2009-12-16 | 北京大学 | 利用开放曲线和临近的闭合曲线构建新的闭合曲线的方法 |
CN101764945A (zh) * | 2008-11-04 | 2010-06-30 | 新奥特(北京)视频技术有限公司 | 一种基于贝塞尔曲线封闭轮廓的字幕渲染方法 |
CN110110258A (zh) * | 2018-02-01 | 2019-08-09 | 阿里巴巴集团控股有限公司 | 一种文字转换的方法、装置以及电子设备 |
CN111857037A (zh) * | 2020-06-19 | 2020-10-30 | 深圳市亿维自动化技术有限公司 | 一种过渡轨迹的生成方法、机器人及计算机可读存储介质 |
CN114117366A (zh) * | 2022-01-25 | 2022-03-01 | 合肥高维数据技术有限公司 | 基于全字符变换的字符变形方法及系统 |
CN114580350A (zh) * | 2020-12-02 | 2022-06-03 | 久瓴(江苏)数字智能科技有限公司 | 文本文字标注方法、装置、计算机设备和存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10936792B2 (en) * | 2017-12-21 | 2021-03-02 | Monotype Imaging Inc. | Harmonizing font contours |
-
2023
- 2023-06-01 CN CN202310640884.6A patent/CN116362202B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101604452A (zh) * | 2008-06-13 | 2009-12-16 | 北京大学 | 利用开放曲线和临近的闭合曲线构建新的闭合曲线的方法 |
CN101764945A (zh) * | 2008-11-04 | 2010-06-30 | 新奥特(北京)视频技术有限公司 | 一种基于贝塞尔曲线封闭轮廓的字幕渲染方法 |
CN110110258A (zh) * | 2018-02-01 | 2019-08-09 | 阿里巴巴集团控股有限公司 | 一种文字转换的方法、装置以及电子设备 |
CN111857037A (zh) * | 2020-06-19 | 2020-10-30 | 深圳市亿维自动化技术有限公司 | 一种过渡轨迹的生成方法、机器人及计算机可读存储介质 |
CN114580350A (zh) * | 2020-12-02 | 2022-06-03 | 久瓴(江苏)数字智能科技有限公司 | 文本文字标注方法、装置、计算机设备和存储介质 |
CN114117366A (zh) * | 2022-01-25 | 2022-03-01 | 合肥高维数据技术有限公司 | 基于全字符变换的字符变形方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN116362202A (zh) | 2023-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020192391A1 (zh) | 基于ocr的图像转档方法、装置、设备及可读存储介质 | |
US5748809A (en) | Active area identification on a machine readable form using form landmarks | |
CN109492199B (zh) | 一种基于ocr预判断的pdf文件转换方法 | |
WO2013058397A1 (ja) | 電子コミック編集装置及び方法 | |
CN110866529A (zh) | 字符识别方法、装置、电子设备及存储介质 | |
CN115393872B (zh) | 一种训练文本分类模型的方法、装置、设备及存储介质 | |
CN111985470A (zh) | 一种自然场景下的船牌矫正识别方法 | |
CN104809099A (zh) | 文档文件生成装置及文档文件生成方法 | |
CN115457043A (zh) | 基于重叠自注意力变形器架构u型网络的图像分割网络 | |
CN114529933A (zh) | 一种合同数据差异性的比对方法、装置、设备和介质 | |
CN116362202B (zh) | 字体生成方法、存储介质及电子设备 | |
CN103489268B (zh) | 一种用于pos平台的阿拉伯语显示方法 | |
US20150278162A1 (en) | Retention of content in converted documents | |
CN112417087A (zh) | 基于文字的溯源方法及系统 | |
US20010016068A1 (en) | Electronic document generating apparatus, electronic document generating method, and program thereof | |
JP2006227824A (ja) | 図面認識方法および装置 | |
CN112395834B (zh) | 基于图片输入的脑图生成方法、装置、设备及存储介质 | |
CN116245052A (zh) | 一种图纸迁移方法、装置、设备和存储介质 | |
CN110909187B (zh) | 图像存储方法、图像读取方法、图像存储器及存储介质 | |
CN112818301A (zh) | Ofd版式电子文档的隐藏信息嵌入及提取方法、装置 | |
JP3070801B2 (ja) | 図面管理方法 | |
CN118070252A (zh) | Pdf内嵌字体水印嵌入和提取方法及系统 | |
CN114399782B (zh) | 文本图像处理方法、装置、设备、存储介质及程序产品 | |
CN114201944A (zh) | 字体变形方法及其构成的水印嵌入和提取方法 | |
CN112233004A (zh) | 图像中的数据嵌入和提取 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |