我在Android中使用矢量图像,我需要访问实际的字形数据。就像构成字体的贝塞尔曲线一样。有什么方法可以访问这些数据吗?我一直在讨论将字体转换为SVG和阅读这些字体,因为我已经具备了这种能力。或者编写自定义的TTF解析器。但是,这些解决方案还需要下载或添加一堆额外的TTF或SVG资产。也许还有很多可能不需要的工作。
有什么方法可以访问给定字体的字形数据吗?
如果失败了,有没有办法访问实际的ttf (或Android使用的任何字体类型)文件?

我正在直接处理矢量图像,并操纵用于构建矢量图像的实际曲线。这意味着需要实际访问曲线。为了构建这个特殊的字母,哪条曲线在哪里。我不想要一个位图或者Android中的harfbuzz最终想出并推入GL的东西,我想要访问用于制作字体的实际曲线。这意味着我可以编写自己的字体解析器并包含自己的字体资产,但所有这些都内置在Android中,但都是在C级别。
我不希望包含一个字体解析器或一堆字体。Android包含了这两种功能,它们是从java级别无法访问的,还是可能存在一些技巧?
我需要字体中的矢量图像。例如字母A的矢量图像。用于构建字母的直线和曲线。我不需要任何字距调整或em数据,或者丢失的字形信息。我想要访问它,而不必将整个解析器和一堆字体资源导入到我的程序中,只是为了获得矢量图像,字体的字母是由这些矢量图像组成的。
发布于 2018-04-01 17:08:20
以下是针对您的需求的解决方案。请继续阅读。
字体大多只是轮廓。也就是说,在你的帖子中,字母"H“上面的虚线是字形的路径。如果你给笔画一种颜色,你就会看到该颜色的字母轮廓。如果您填充它,则字母将以该颜色实心显示。
您可以使用fontforge组织的“字体编辑器”来获取路径数据。fontforge的软件是免费的(他们接受捐赠)。如果你想要中心线,而不是轮廓,那么你必须绘制中心线,然后将其导出为SVG文件。您将一次导出单个字母。您可以在写字板中打开SVG文件并获取中心线的路径数据。无论字形如何弯曲,你都可以很容易地画出中心线。有时你甚至可以改进中心线上字形的形状。如果它是中心线,那么当您再次绘制时,笔划将具有均匀的粗细。不像原来的字形那样,线条(中心线)的粗细逐渐变化。你可以在几天内掌握字体编辑器。
请参见下面的字形。将下面的代码复制并粘贴到Android Studio中的xml文件中,可以看到以蓝色color.That绘制的字形是厚度为32dp的中心线,而不是轮廓和填充。
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="600dp"
android:height="600dp"
android:viewportWidth="800.0"
android:viewportHeight="800.0">
<path
android:pathData="M 162 8
q -07 00 -41 26
q -34 27 -50 64
q -25 59 -19 117
q 07 70 53 121
q 57 63 151 62
q 87 -01 140 -66
q 46 -55 48 -142
q 01 -56 -34 -105
q -38 -52 -77 -70
l -29 -11
q 16 -01 31 -02
q 59 -01 119 -02 "
android:strokeLineCap="round"
android:strokeColor="#f00f"
android:fillColor="#00000000"
android:strokeWidth="32"/>
</vector>https://stackoverflow.com/questions/32863554
复制相似问题