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