macOS 轉換 SVG 到 PNG

Wi1dcard發表於2019-06-20

論如何以程式設計師的方式,輕量、快速、優雅地轉換 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 協議》,轉載必須註明作者和本文連結

Former WinForm and PHP Engineer. Now focus on #DevSecOps and global networking.

相關文章