論如何以程式設計師的方式,輕量、快速、優雅地轉換 SVG 到 PNG。
0x00 問題描述
近期公司專案過程中,使用 Navicat 製作 E-R 圖,為了快速進行頭腦風暴,需要把關係圖列印出來。
由於業務邏輯比較複雜,圖片也越來越龐大。
最早嘗試使用 File
-> Print as...
-> PNG
匯出,但是後來發現其 DPI 比較低,而且在模型關係比較大的時候,匯出的 PNG 會比較模糊。
後嘗試匯出至 PDF
,但是 Page setup
最多隻能設定 A0 大小,這樣匯出的 PDF 就會被分割為兩頁,還需要麻煩 UI 小姐姐合併。
最後還剩終極方案,就是 SVG
,很不幸的是列印店的電腦沒有 macOS 的字型,而且很卡很卡。
由此,問題被轉化為:SVG => PNG
。
方案其實有很多,谷歌一大把。簡單列舉幾個。
- 線上轉換。
AI
Command
+Shift
+3
截圖。Safari
/Chrome
開啟再匯出為圖片。qlmanage
inkscape
ImageMagick
- ...
但都不太符合我的需求。
- 所謂輕量,AI 就算了,我可不是 UI 大佬。
- 所謂快速,裝一大堆 Casks 也算了吧。
- 所謂優雅,透明、DPI 選項也不能缺。
考慮到公司專案保密性,線上轉換也被 Pass。
0x01 Coder's Way
既然作為程式設計師同時又是個懶蛋,那就要用懶人 + 程式設計師的方式來解決這個問題。
經過一番嘗試,最合適的方案是 librsvg
。一行命令搞定。
ImageMagick
也是個不錯的選擇,但其內部的 SVG Render 引擎似乎支援不完全,轉換時出現報錯,GitHub Issue;我的版本是 7.0.8-11
,若有哪位大佬瞭解情況歡迎留言討論,謝謝。
0x02 安裝
brew install librsvg
0x03 使用
rsvg-convert --help
使用方法非常簡單,引數看起來也不怎麼高深,似乎很適合不熟悉影像處理領域的程式設計師們。
rsvg-convert -d 180 -p 180 test.svg > test.png
這裡我增大一倍 DPI,讓圖片看起來很清晰。轉換速度很快,實測 11800 × 12698
的圖片在我的菜雞 MacBook 上只需要三秒左右。
0xFF 結語
真實列印出來的 E-R 圖足足有一面牆那麼大... 可怕。
本作品採用《CC 協議》,轉載必須註明作者和本文連結