欢迎光临散文网 会员登陆 & 注册

Pycairo的修复记录

2022-04-30 02:21 作者:clerk_ma  | 我要投稿

开源的2D绘图库,可选的有几个,比如:cairo,skia,agg。

从个人使用的频率上看,主要是cairo。Skia也用过,不过主要是为了增加特定的。不过,这个增加特性的事,还跟以前锤子手机的显示优化相关。(是的,我不说,就没人知道我还干过这事。)

cairo的使用,我直接调用C API比较多。不过由于自己多部分的项目是使用的python,那么使用cairo的python支持库还是很有必要的,能够无缝衔接。

历来,pycairo在windows上是不能用的。conda的情况我没看,pypi上的cairo很长时间是源码包,需要编译。

pycairo在1.19.1版本之前都需要编译,在1.20.1之后就能直接安装了。不过,能安装的win版本,在绘制PDF上面,总是有小毛病。这毛病确实不大:就是绘制出的PDF是损坏的。可以测试的例子如下:

由于我自己的tex也是加了一个cairo支持的,我就试着编译了一套,结果也是崩的。在调整了编译选项之后。项目就编译过了。具体的代码可以参考我在github上的放的pycairo-msvc-build项目。

pycairo的编译,原项目使用的是meson。这东西在linux和mac上面其实问题不大。但是在windows上,有时候就很麻烦。主要是visual studio编译器的运行时有很多种,我有时候为了发布上的便利,会静态编译一些东西。所以,针对这种情况,我都会写一些nmake脚本。当然了,有时候为了省事,也可能直接写个python脚本来跑编译的过程。

编译好的文件,直接替换掉通过pip安装的pycairo中的pyd文件就能用了。如果不能用,可以发消息告诉我,或者给项目提issue。当然,读者能自己解决就更好了。

我在很久之前讲过,我写过pgf/tikz的cairo后端。这事确实不难,就是维护一个状态而已,把pdf绘制的primitive转成cairo的API调用。这玩意是个定制化的商业项目。

这类后端的东西,其实还可以写一个翻译层。也就是说,丢给dvipdfmx的dvi中的pgf/tikz绘制,也可以转化后丢给cairo或者其他2D图形库来用。这是我在做的iOS项目在弄的东西。



Pycairo的修复记录的评论 (共 条)

分享到微博请遵守国家法律