add personal notes for measuring text
This commit is contained in:
parent
eeb9815702
commit
5bf5f5cbe5
2 changed files with 62 additions and 34 deletions
62
src/量測文字.txt
Normal file
62
src/量測文字.txt
Normal file
|
@ -0,0 +1,62 @@
|
|||
import * as fontkit from "fontkit";
|
||||
var font = await fontkit.openSync('/home/yoxem/桌面/TMP/ts-playground/aliputtat/LinLibertine_DR.otf');
|
||||
var run = font.layout('a̍h',undefined, undefined, undefined, "ltr");
|
||||
|
||||
for (var i=0;i<=2;i++){
|
||||
console.log(run.glyphs[i]._metrics);
|
||||
console.log(run.glyphs[i].bbox); // bounding box
|
||||
console.log(run.glyphs[i].advanceWidth);
|
||||
}
|
||||
|
||||
|
||||
/*結果:
|
||||
|
||||
假設文字大小為16(px)(=12pt),則下面的數字單位為
|
||||
16/1000 px = [文字pt值]*(4/3)/1000 px
|
||||
454 即 454*16/1000 px;1140即1140*16/1000 px等等。
|
||||
*/
|
||||
|
||||
{
|
||||
advanceWidth: 454, // 游標前進的長度
|
||||
advanceHeight: 1140, // 游標往下的長度
|
||||
leftBearing: 42,
|
||||
topBearing: 475
|
||||
}
|
||||
$f34600ab9d7f70d8$export$2e2bcd8739ae039 {
|
||||
minX: 42, // 文字最左邊的x座標
|
||||
minY: -10, // 文字最下邊的y座標
|
||||
maxX: 441, // 文字最右邊的座標
|
||||
maxY: 419 // 文字最上的座標
|
||||
|
||||
}
|
||||
//文字glyph字圖寬度 = (441-42)*16/1000 px
|
||||
//文字glyph字圖高度 = (419-(-10))*16/1000 px
|
||||
|
||||
|
||||
454
|
||||
{
|
||||
advanceWidth: 0,
|
||||
advanceHeight: 1140,
|
||||
leftBearing: -181,
|
||||
topBearing: 184
|
||||
}
|
||||
$f34600ab9d7f70d8$export$2e2bcd8739ae039 {
|
||||
minX: -181,
|
||||
minY: 548,
|
||||
maxX: -127,
|
||||
maxY: 710
|
||||
}
|
||||
0
|
||||
{
|
||||
advanceWidth: 511,
|
||||
advanceHeight: 1140,
|
||||
leftBearing: 18,
|
||||
topBearing: 196
|
||||
}
|
||||
$f34600ab9d7f70d8$export$2e2bcd8739ae039 {
|
||||
minX: 18.5,
|
||||
minY: -5,
|
||||
maxX: 499.75,
|
||||
maxY: 698
|
||||
}
|
||||
511
|
|
@ -1,34 +0,0 @@
|
|||
import sys
|
||||
|
||||
import uharfbuzz as hb
|
||||
|
||||
|
||||
fontfile = sys.argv[1]
|
||||
text = sys.argv[2]
|
||||
|
||||
blob = hb.Blob.from_file_path(fontfile)
|
||||
face = hb.Face(blob)
|
||||
font = hb.Font(face)
|
||||
|
||||
px = 96
|
||||
scale = 1000000.0/952997
|
||||
font.scale = (px *scale* 1024, px*scale * 1024)
|
||||
|
||||
buf = hb.Buffer()
|
||||
buf.add_str(text)
|
||||
buf.guess_segment_properties()
|
||||
|
||||
features = {"kern": True, "liga": True}
|
||||
hb.shape(font, buf, features)
|
||||
|
||||
infos = buf.glyph_infos
|
||||
positions = buf.glyph_positions
|
||||
|
||||
for info, pos in zip(infos, positions):
|
||||
gid = info.codepoint
|
||||
cluster = info.cluster
|
||||
x_advance = pos.x_advance / 1024
|
||||
y_advance = pos.y_advance / 1024
|
||||
x_offset = pos.x_offset / 1024
|
||||
y_offset = pos.y_offset /1024
|
||||
print(f"gid{gid}={cluster}@{x_advance},{y_offset}+{x_advance},{y_advance}")
|
Loading…
Reference in a new issue