在GIMP中沿路径附加文本

3 投票
1 回答
754 浏览
提问于 2025-04-16 17:51

我最近在研究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/找到。

我希望(多亏了这两位朋友)这篇帖子能对你有所帮助。

撰写回答