From cff7621adf444a0899ba413dd9339bbcddfda4fc Mon Sep 17 00:00:00 2001 From: kekee000 Date: Wed, 17 Apr 2024 21:41:57 +0800 Subject: [PATCH] feat: add kerning tables read and write directly --- README.md | 10 +++++-- demo/js/ttfmin.js | 9 +++--- demo/ttfmin.html | 20 +++++++++++--- index.d.ts | 8 +++++- package.json | 2 +- src/ttf/font.js | 7 +++-- src/ttf/table/GPOS.js | 2 +- src/ttf/table/kern.js | 2 +- src/ttf/table/kerx.js | 30 ++++++++++++++++++++ src/ttf/table/support.js | 5 ++-- src/ttf/table/table.js | 8 +++--- src/ttf/ttfreader.js | 11 ++++++-- src/ttf/ttfwriter.js | 14 ++++++++-- test/data/FiraSansMedium.ttf | Bin 0 -> 127128 bytes test/example/example.ts | 8 ++++-- test/spec/ttf/otfreader.spec.js | 4 +-- test/spec/ttf/ttfreader.spec.js | 15 ++++------ test/spec/ttf/ttfwriter.spec.js | 47 ++++++++++++++++++++++++++++---- 18 files changed, 153 insertions(+), 49 deletions(-) create mode 100644 src/ttf/table/kerx.js create mode 100644 test/data/FiraSansMedium.ttf diff --git a/README.md b/README.md index d172e9c..bda20a9 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,10 @@ const font = Font.create(buffer, { type: 'ttf', // only read `a`, `b` glyphs subset: [65, 66], - // save font hinting + // read font hinting tables, default false hinting: true, + // read font kerning tables, default false + kerning: true, // transform ttf compound glyph to simple compound2simple: true, // inflate function for woff @@ -71,8 +73,10 @@ console.log(Object.keys(fontObject)); const buffer = font.write({ // support ttf, woff, woff2, eot, svg type: 'woff', - // save font hinting, default false - hinting: true, + // save font hinting tables, default false + hinting: false, + // save font kerning tables, default false + kerning: false, // write glyf data when simple glyph has no contours, default false writeZeroContoursGlyfData: false, // deflate function for woff, eg. pako.deflate diff --git a/demo/js/ttfmin.js b/demo/js/ttfmin.js index fc8b635..019c2e4 100644 --- a/demo/js/ttfmin.js +++ b/demo/js/ttfmin.js @@ -17,12 +17,12 @@ function onUpFileChange(e) { let file = e.target.files[0]; let reader = new FileReader(); reader.onload = function (e) { - let ttfReader = new TTFReader({ - hinting: true + hinting: true, + kerning: true, }); curttfData = ttfReader.read(e.target.result); - + console.log(curttfData); ttfmin(); }; @@ -69,7 +69,8 @@ function ttfmin() { let family = 'font-with-hitting'; ttf.get().name.fontFamily = family; let writer = new TTFWriter({ - hinting: true + hinting: true, + kerning: true, }); let buffer = writer.write(ttf.get()); setFont({ diff --git a/demo/ttfmin.html b/demo/ttfmin.html index bd469f6..86602dc 100644 --- a/demo/ttfmin.html +++ b/demo/ttfmin.html @@ -17,9 +17,13 @@ div { padding: 10px; } - + .text-title { + display: inline-block; + width: 140px; + } .ttf-text { font-size: 14px; + letter-spacing: 1px; } .ttf-min-with-hitting { @@ -39,16 +43,24 @@
相关文字: - + 字号:
- 带hinting的字体: + 带hinting的字体: +
+ +
+ 不带hinting的字体: +
+ +
+ 带kerning的字体:
- 不带hinting的字体: + 不带kerning的字体:
diff --git a/index.d.ts b/index.d.ts index 9fd5519..bb9046a 100644 --- a/index.d.ts +++ b/index.d.ts @@ -194,10 +194,16 @@ export namespace FontEditor { subset?: TTF.CodePoint[]; /** - * keep hinting or not, default false + * keep hinting table or not, default false */ hinting?: boolean; + /** + * keep kerning table or not, default false + * kerning table adjusting the space between individual letters or characters + */ + kerning?: boolean; + /** * tranfrom compound glyph to simple, * @default true diff --git a/package.json b/package.json index aed5dac..e5062ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fonteditor-core", - "version": "2.3.3", + "version": "2.4.0", "description": "fonts (ttf, woff, woff2, eot, svg, otf) parse, write, transform, glyph adjust.", "keywords": [ "sfnt", diff --git a/src/ttf/font.js b/src/ttf/font.js index 69c5b0e..7905cb5 100644 --- a/src/ttf/font.js +++ b/src/ttf/font.js @@ -79,7 +79,8 @@ export default class Font { * @param {string} options.type 字体类型 * * ttf, woff , eot 读取配置 - * @param {boolean} options.hinting 保留hinting信息 + * @param {boolean} options.hinting 是否保留 hinting 信息 + * @param {boolean} options.kerning 是否保留 kerning 信息 * @param {boolean} options.compound2simple 复合字形转简单字形 * * woff 读取配置 @@ -134,8 +135,8 @@ export default class Font { * @param {boolean} options.toBuffer nodejs 环境中返回 Buffer 对象, 默认 true * * ttf 字体参数 - * @param {boolean} options.hinting 保留hinting信息 - * + * @param {boolean} options.hinting 是否保留 hinting 信息 + * @param {boolean} options.kerning 是否保留 kerning 信息 * svg,woff 字体参数 * @param {Object} options.metadata 字体相关的信息 * diff --git a/src/ttf/table/GPOS.js b/src/ttf/table/GPOS.js index 9f7ad4c..9e19e9d 100644 --- a/src/ttf/table/GPOS.js +++ b/src/ttf/table/GPOS.js @@ -2,7 +2,7 @@ * @file GPOS * @author fr33z00(https://github.com/fr33z00) * - * @reference: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6cvt.html + * @reference: https://learn.microsoft.com/en-us/typography/opentype/spec/gpos */ import table from './table'; diff --git a/src/ttf/table/kern.js b/src/ttf/table/kern.js index 67bc49a..324a972 100644 --- a/src/ttf/table/kern.js +++ b/src/ttf/table/kern.js @@ -2,7 +2,7 @@ * @file kern * @author fr33z00(https://github.com/fr33z00) * - * @reference: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6cvt.html + * @reference: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6kern.html */ import table from './table'; diff --git a/src/ttf/table/kerx.js b/src/ttf/table/kerx.js new file mode 100644 index 0000000..6397787 --- /dev/null +++ b/src/ttf/table/kerx.js @@ -0,0 +1,30 @@ +/** + * @file kerx + * @author mengke01(kekee000@gmail.com) + * + * @reference: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6kerx.html + */ + +import table from './table'; + +export default table.create( + 'kerx', + [], + { + + read(reader, ttf) { + const length = ttf.tables.kerx.length; + return reader.readBytes(this.offset, length); + }, + + write(writer, ttf) { + if (ttf.kerx) { + writer.writeBytes(ttf.kerx, ttf.kerx.length); + } + }, + + size(ttf) { + return ttf.kerx ? ttf.kerx.length : 0; + } + } +); diff --git a/src/ttf/table/support.js b/src/ttf/table/support.js index ff5b2e6..41f3a12 100644 --- a/src/ttf/table/support.js +++ b/src/ttf/table/support.js @@ -19,7 +19,7 @@ import prep from './prep'; import gasp from './gasp'; import GPOS from './GPOS'; import kern from './kern'; - +import kerx from './kerx'; export default { head, @@ -37,5 +37,6 @@ export default { prep, gasp, GPOS, - kern + kern, + kerx }; diff --git a/src/ttf/table/table.js b/src/ttf/table/table.js index cc284f9..26b8a77 100644 --- a/src/ttf/table/table.js +++ b/src/ttf/table/table.js @@ -200,11 +200,11 @@ export default { * 创建一个表结构 * * @param {string} name 表名 - * @param {Object} struct 表结构 - * @param {Object} prototype 原型 + * @param {Array<[string, number]>} struct 表结构 + * @param {Object} proto 原型 * @return {Function} 表构造函数 */ - create(name, struct, prototype) { + create(name, struct, proto) { class Table { constructor(offset) { this.name = name; @@ -217,7 +217,7 @@ export default { Table.prototype.write = write; Table.prototype.size = size; Table.prototype.valueOf = valueOf; - Object.assign(Table.prototype, prototype); + Object.assign(Table.prototype, proto); return Table; } }; diff --git a/src/ttf/ttfreader.js b/src/ttf/ttfreader.js index 8015206..4b8ced5 100644 --- a/src/ttf/ttfreader.js +++ b/src/ttf/ttfreader.js @@ -26,7 +26,8 @@ export default class TTFReader { */ constructor(options = {}) { options.subset = options.subset || []; // 子集 - options.hinting = options.hinting || false; // 不保留hints信息 + options.hinting = options.hinting || false; // 默认不保留 hints 信息 + options.kerning = options.kerning || false; // 默认不保留 kerning 信息 options.compound2simple = options.compound2simple || false; // 复合字形转简单字形 this.options = options; } @@ -180,13 +181,17 @@ export default class TTFReader { delete ttf.fpgm; delete ttf.cvt; delete ttf.prep; - delete ttf.GPOS; - delete ttf.kern; ttf.glyf.forEach((glyf) => { delete glyf.instructions; }); } + if (!this.options.hinting && !this.options.kerning) { + delete ttf.GPOS; + delete ttf.kern; + delete ttf.kerx; + } + // 复合字形转简单字形 if (this.options.compound2simple && ttf.maxp.maxComponentElements) { ttf.glyf.forEach((glyf, index) => { diff --git a/src/ttf/ttfwriter.js b/src/ttf/ttfwriter.js index 22084f8..f2151e2 100644 --- a/src/ttf/ttfwriter.js +++ b/src/ttf/ttfwriter.js @@ -27,7 +27,8 @@ export default class TTFWriter { constructor(options = {}) { this.options = { writeZeroContoursGlyfData: options.writeZeroContoursGlyfData || false, // 不写入空 glyf 数据 - hinting: options.hinting || false, // 不保留hints信息 + hinting: options.hinting || false, // 默认不保留hints信息 + kerning: options.kerning || false, // 默认不保留 kernings space 信息 support: options.support // 自定义的导出表结构,可以自己修改某些表项目 }; } @@ -200,7 +201,15 @@ export default class TTFWriter { ttf.writeOptions = {}; // hinting tables direct copy if (this.options.hinting) { - ['cvt', 'fpgm', 'prep', 'gasp', 'GPOS', 'kern'].forEach((table) => { + ['cvt', 'fpgm', 'prep', 'gasp', 'GPOS', 'kern', 'kerx'].forEach((table) => { + if (ttf[table]) { + tables.push(table); + } + }); + } + // copy kerning space table + if (this.options.kerning) { + ['GPOS', 'kern', 'kerx'].forEach((table) => { if (ttf[table]) { tables.push(table); } @@ -208,6 +217,7 @@ export default class TTFWriter { } ttf.writeOptions.writeZeroContoursGlyfData = !!this.options.writeZeroContoursGlyfData; ttf.writeOptions.hinting = !!this.options.hinting; + ttf.writeOptions.kerning = !!this.options.kerning; ttf.writeOptions.tables = tables.sort(); } diff --git a/test/data/FiraSansMedium.ttf b/test/data/FiraSansMedium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8e9d01837c574d1ef60f2b0fdf83968278c09765 GIT binary patch literal 127128 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 1000); assert.ok(buffer.byteLength < 10000); - assert.equal(fontObject.cvt.length, 24); - assert.equal(fontObject.fpgm.length, 371); - assert.equal(fontObject.prep.length, 204); - assert.equal(fontObject.gasp.length, 8); - assert.equal(fontObject.GPOS.length, 18); + let fontObject1 = new TTFReader({ + hinting: true + }).read(buffer); + assert.equal(fontObject1.cvt.length, 24); + assert.equal(fontObject1.fpgm.length, 371); + assert.equal(fontObject1.prep.length, 204); + assert.equal(fontObject1.gasp.length, 8); + assert.equal(fontObject1.GPOS.length, 18); + }); +}); + +describe('write ttf kerning', function () { + + let fontObject = new TTFReader({ + kerning: true + }).read(readData('FiraSansMedium.ttf')); + + it('test write ttf no kerning', function () { + let buffer = new TTFWriter({ + kerning: false + }).write(fontObject); + assert.ok(buffer.byteLength > 100000); + assert.ok(buffer.byteLength < 110000); + }); + + it('test write ttf kerning', function () { + assert.equal(fontObject.GPOS.length, 5960); + let buffer = new TTFWriter({ + kerning: true + }).write(fontObject); + assert.ok(buffer.byteLength > 110000); + assert.ok(buffer.byteLength < 120000); + let fontObject1 = new TTFReader({ + kerning: true + }).read(buffer); + assert.equal(fontObject1.GPOS.length, 5960, 'GPOS size'); }); });