# Python中如何將 SVG 轉換成 PNG
在寫搶票程式的過程中
有遇到處理圖形驗證碼的問題
此時需要先將圖片抓下來,
再透過`openCV`, `numpy`, 以及`OCR`等技術將文字給輸出
然而在windows上, 做這件事情會有點複雜
所以將過程記錄下來
先附上相關資訊
OS: Windows 10 22H2
Python: 3.11.4
# CairoSVG
這次是使用`CairoSVG`
首先安裝套件
```
pip install CairoSVG
```
接著寫程式
```python=
import cairosvg
svg_file_path = "your svg path"
png_file_path = "your png path"
cairosvg.svg2png(url=svg_file_path, write_to=png_file_path)
```
當你執行他
沒意外會遇到以下錯誤
```
OSError: no library called "cairo-2" was found
no library called "cairo" was found
cannot load library 'C:\Program Files (x86)\GTK2-Runtime\bin\libcairo-2.dll': error 0xc1
cannot load library 'libcairo.so.2': error 0x7e. Additionally, ctypes.util.find_library() did not manage to locate a library called 'libcairo.so.2'
cannot load library 'libcairo.2.dylib': error 0x7e. Additionally, ctypes.util.find_library() did not manage to locate a library called 'libcairo.2.dylib'
cannot load library 'C:\Program Files (x86)\GTK2-Runtime\bin\libcairo-2.dll': error 0xc1
```
沒意外應該是缺少了一些驅動, 所以只有安裝套件是不夠的
# 怎麼解決?
要先進來這個網站
https://sk1project.net/uc2/download/
接著選擇你作業系統的.msi檔
我的是64位元, 所以選擇`uniconvertor-2.0rc5-win64_headless.msi`下載
然後就安裝
接著設定環境變數
打開windows 10的搜尋功能(放大鏡)
輸入`編輯系統環境變數`並打開

選擇`進階`頁籤, 再點擊`環境變數`

點開後會進入以下畫面, 在`系統變數`的位置找到變數名為`Path`的欄位
點他一下然後按編輯

接著進入以下畫面選擇瀏覽

選擇以下路徑後並確定
```
C:\Program File\UniConvertor-2.05rc5\dlls
```
最後就依序關閉視窗, 重新啟動電腦
這步很重要, 一定要重新啟動才會生效
再次執行程式應該就沒問題了
這邊開始印象就有點模糊, 反正我是都加了
如果還是不行, 可以試試依據前面的錯誤訊息
將該路徑`C:\Program Files (x86)\GTK2-Runtime\bin\`也加到環境變數中
再次重啟電腦應該就可以了
# 結論
其實這篇主要是用來記錄除錯的過程而不是如何使用這個module
因為找了老半天實在找不太到怎麼除錯
不然轉換本身並不是太難, GPT4就可以幫你生成程式了
當然SVG本身是要完整的格式就是了
但以這篇遇到的狀況來說, AI似乎沒辦法很好的除錯
所以就把過程寫一下
# 參考資料
最後附上參考資料
1. https://stackoverflow.com/questions/59481394/django-oserror-no-library-called-cairo-was-found-on-windows
2. https://sk1project.net/uc2/download/