在GIMP中沿路径附加文本
我最近在研究gimp的API(用python-fu),其实挺有意思的。
不过,有一件事我一直搞不定:怎么把文字附在路径上。
用软件界面来做这件事其实很简单(先创建一个路径 > 然后创建文字 > 在工具箱里点击“沿路径放置文字”)……但是,正如你们想的,我不喜欢简单的事情。所以我想用python来实现。
我现在已经做到的有:
- 创建一个图层
- 在上面添加一个路径
- 创建新的文字
- 把这些都显示出来
现在我只需要学习怎么让我的文字沿着路径走。
如果有人能帮忙,我会非常感激。
谢谢!
1 个回答
4
我在网上花了好几个小时找资料(那一边没有裸体图片的地方),但还是没找到关于我问题的太多信息。所以我决定查看Gimp的源代码,想知道“沿路径文本”这个神奇功能到底是怎么运作的……结果发现这个功能并没有通过PDB(程序数据库)提供出来。
之后,为了确认我的猜想,我在Gimp开发者的邮件列表上发了问询,有人(我不知道我是否可以在这里说出他的名字)给我回复了:
“沿路径文本”这个功能基本上是个临时解决方案,从来没有打算作为最终产品。一个真正的沿路径文本功能应该能够改变路径,并相应地调整文本。而且,扭曲文本的渲染效果也不太理想。因为最初的计划就是这个功能会有所变化,所以从来没有为它创建PDB接口。
另一个人告诉我怎么创建自己的“沿路径文本”插件:
不过,据我所知,路径中的贝塞尔曲线有以下特性:对它们的控制点和手柄应用仿射变换,相当于对曲线上的每个点应用相同的变换。所以你可以这样做:
- 确定一个“参考路径”,也就是沿着文本的直线路径(或者穿过文本中间的路径)
- 对每条曲线进行迭代,处理控制点,对于每个点(“C”):
- 确定在参考路径上的投影(距离参考路径起点的距离)(我们称之为“R”)以及到它的距离
- 找到目标路径上对应的点(pdb.gimp_path_get_point_at_dist()),记作“R'”
- 找到新的控制点C'的位置:与目标路径保持相同的距离,且在垂直方向上
- 计算手柄的位置:
- 计算H和C之间的dx/dy
- 从新的控制点C'计算出等效位置H'
- 围绕C'进行旋转,旋转角度是目标路径在R'的方向(通过之前的gimp_path_get_point_at_dist()返回)来生成新的手柄位置(H")
- 对第二个手柄重复上述步骤
- 将三元组C'、H"1、H"2添加到新的曲线中
然后他鼓励我去看看两个做类似事情的插件,分别叫做ribbon-path和slinky,可以在http://gimp-path-tools.sourceforge.net/找到。
我希望(多亏了这两位朋友)这篇帖子能对你有所帮助。