Pycairo的修復記錄
開源的2D繪圖庫,可選的有幾個,比如:cairo,skia,agg。
從個人使用的頻率上看,主要是cairo。Skia也用過,不過主要是為了增加特定的。不過,這個增加特性的事,還跟以前錘子手機的顯示優(yōu)化相關。(是的,我不說,就沒人知道我還干過這事。)
cairo的使用,我直接調(diào)用C API比較多。不過由于自己多部分的項目是使用的python,那么使用cairo的python支持庫還是很有必要的,能夠無縫銜接。
歷來,pycairo在windows上是不能用的。conda的情況我沒看,pypi上的cairo很長時間是源碼包,需要編譯。
pycairo在1.19.1版本之前都需要編譯,在1.20.1之后就能直接安裝了。不過,能安裝的win版本,在繪制PDF上面,總是有小毛病。這毛病確實不大:就是繪制出的PDF是損壞的??梢詼y試的例子如下:
由于我自己的tex也是加了一個cairo支持的,我就試著編譯了一套,結(jié)果也是崩的。在調(diào)整了編譯選項之后。項目就編譯過了。具體的代碼可以參考我在github上的放的pycairo-msvc-build項目。
pycairo的編譯,原項目使用的是meson。這東西在linux和mac上面其實問題不大。但是在windows上,有時候就很麻煩。主要是visual studio編譯器的運行時有很多種,我有時候為了發(fā)布上的便利,會靜態(tài)編譯一些東西。所以,針對這種情況,我都會寫一些nmake腳本。當然了,有時候為了省事,也可能直接寫個python腳本來跑編譯的過程。
編譯好的文件,直接替換掉通過pip安裝的pycairo中的pyd文件就能用了。如果不能用,可以發(fā)消息告訴我,或者給項目提issue。當然,讀者能自己解決就更好了。
我在很久之前講過,我寫過pgf/tikz的cairo后端。這事確實不難,就是維護一個狀態(tài)而已,把pdf繪制的primitive轉(zhuǎn)成cairo的API調(diào)用。這玩意是個定制化的商業(yè)項目。
這類后端的東西,其實還可以寫一個翻譯層。也就是說,丟給dvipdfmx的dvi中的pgf/tikz繪制,也可以轉(zhuǎn)化后丟給cairo或者其他2D圖形庫來用。這是我在做的iOS項目在弄的東西。