皮开罗对比开罗菲对比开罗

Pycairo vs. cairocffi vs. Qahirah

我想在 Python 中创建和栅格化矢量图形。我怀疑 Pycairo or cairocffi (edit: or Qahirah) 是一个不错的选择。 (如果没有,欢迎评论。)

两者的实际区别是什么?

具体来说,Pycairo documentation 表示:

If Pycairo is not what you need, have a look at cairocffi, which is an API compatible package using cffi or Qahirah, which is using ctypes and provides a more "pythonic" API with less focus on matching the cairo C API.

但这提出了一些问题:在什么情况下 Pycairo 可能“不是你需要的”,而 cairocffi 是? cffi/Qahirah/ctypes 在哪些方面比 Pycairo 所做的更好? Pycairo 在哪些方面不是“pythonic”?如果cairocffi比Pycairo好,为什么Pycairo更受欢迎,有没有优势?

编辑: A comma might be missing after "cffi" 在上面的引用中。在那种情况下,这不是关于“Pycairo vs. cairocffi”,而是关于“Pycairo vs. cairocffi vs. Qahirah”。

密切模仿 C API 意味着函数采用简单参数。 例如,move_to function/method 看起来像这样:

ctx.move_to(x: float, y: float)→ None

如果您想在程序中使用 (x,y) 点或向量, 然后在某些时候你可能会因为需要写而感到恼火, 比如,move_to(P[0], P[1]) 而不仅仅是 move_to(P).

在 Qahirah 你这样写:

p = Vector(x, y)
ctx.move_to(p)

或者也许

ctx.move_to(Vector(x, y))

甚至

ctx.move_to((x, y))

你可以把CAPI当成一个base level on top可以构建更方便API.

一如既往,它是 trade-off。使用直接样式 C API 可能会更快(但不会太多)。

可以在 Qahirah 的自述文件中找到更多信息:

https://github.com/ldo/qahirah 

再一次 - 如果您找到使用 C 的 Cairo 教程,使用直接样式 C 可能更容易 API。

两者都试一下,看看你喜欢哪个。