mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 14:53:32 +08:00
原 3 次遍历(x 解码→y 解码→triplet 编码)+ yCoords Int32Array 中转; 现 2 次遍历(x 解码→y 解码+triplet 编码合并)。 关键洞察:triplet delta 语义 = TTF delta(都是相对前一点的差), 所以解码 y 的同时用已存 xCoords[i] 配对编码 triplet,无需 yCoords 数组。 bbox_y 的 min/max 在合并循环同步计算,bbox bitmap 判定拆为 x/y 两段。 千字文 woff2 2.87ms→2.59ms(-9.6%),字节输出与 clean 版 cmp 完全一致, SSIM 全部不变。删除 _reuseYCoords 模块级缓冲区。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
19 lines
885 B
TypeScript
19 lines
885 B
TypeScript
import { readFileSync } from 'fs';
|
|
import { fontSubset } from './backend/font_util/font.js';
|
|
import supportMod from './vendor/fonteditor-core/lib/ttf/table/support.js';
|
|
const support = (supportMod as any).default || supportMod;
|
|
const hmtxT = support.hmtx;
|
|
const origRead = hmtxT.prototype.read;
|
|
hmtxT.prototype.read = function(reader: any, ttf: any) {
|
|
const r = origRead.call(this, reader, ttf);
|
|
if (ttf.subsetGids) {
|
|
let mx = 0;
|
|
for (const g of ttf.subsetGids) if (g>mx) mx=g;
|
|
console.log(`numGlyphs=${ttf.maxp.numGlyphs} subsetGids.len=${ttf.subsetGids.length} maxGid=${mx} alloc=${ttf.maxp.numGlyphs*2*4}B needed=${(mx+1)*2*4}B`);
|
|
}
|
|
return r;
|
|
};
|
|
const buf = readFileSync('font/令东齐伋复刻体.ttf');
|
|
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
fontSubset(ab, '天地玄黄宇宙洪荒', {sourceType:'ttf',outType:'ttf'});
|