我最近一直在考虑字体。我发现将击键转换为以特定字体显示的字符的整个过程非常有趣。更让我着迷的是,每个角色都不是图像,而只是打开(或关闭)的正确像素束。
在 Photoshop 中制作文本图层时,我假设它与文字处理器中的任何其他文本图层一样。有一个字形附加到一个字符并显示出来。所以从技术上讲,它仍然不是可以说话的“图像”,它可以被视为文字处理器中的文本。但是,当您栅格化文本图层时,会使用所使用的字体创建文本图像。谁能告诉我 Photoshop 是如何做到这一点的?我假设应该有一个查找表,其中包含 Photoshop 访问以栅格化图层的字符图形。
我想创建一个程序,在其中生成我按下的字符的图像(用 C 或 Python 或类似语言)。有办法做到这一点吗?
最佳答案
Adobe 目前有关于 the Photoshop file format 的公开文档.我需要从 PSD 文件中提取信息(大约一年前,但实际上是 Photoshop 的古老 CS2 版本)所以我可以警告你这不是简单的阅读,并且有一些部分(至少在 CS2 文档中) ) 不完整或不准确。通常,即使您拥有文件格式文档,也需要进行一些逆向工程才能使用该文件格式。
即便如此,请参阅 here有关来自 Photoshop 6.0 的 TySh
block 的信息(快速浏览一下不确定它是否仍然是文本的当前形式 - “键入”到 Photoshop)。
无论如何,是的 - 文本作为字符代码序列存储在内存和文件中。字体基本上是 vector 图的集合,因此可以将文本转换为 vector 路径。这可以通过自己处理字体文件、使用操作系统调用(肯定有一个用于 Windows 的,但我不记得名字了,它现在很烦我,所以我以后可能会弄清楚)或使用图书馆。
一旦你有了 vector 形式,这基本上就是贝塞尔曲线路径,就像任何其他 vector 艺术作品一样,并且可以用相同的方式呈现。
或者直接从文本到像素,你只需要问例如Windows 为您绘制文本 - 如果您不想绘制到屏幕,可能绘制到内存 DC(设备上下文)。
FreeType是一个用于处理字体的开源库。它绝对可以呈现为位图。我没有检查过,但它可能也可以将文本转换为 vector 路径 - 毕竟无论如何它都需要将其作为渲染像素的一部分。
Cairo是另一个明显的字体处理库,但我自己从未直接使用过它。
wxWidgets是另一个明显的库,它使用类似于 Windows 的内存 DC 方案,但我不记得确切的类/方法名称。不过,将文本转换为 vector 可能超出了 wxWidgets 的范围。
关于python - Photoshop 如何将字体格式转换为栅格化图层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33600822/