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