LunaSVG 是一個 C++ 語言的 SVG 渲染庫,旨在輕量級和可移植性,提供可擴展向量圖形 (SVG) 檔案的高效渲染和操作。
# include < lunasvg.h >
using namespace lunasvg ;
int main ()
{
auto document = Document::loadFromFile ( " tiger.svg " );
if (document == nullptr )
return - 1 ;
auto bitmap = document-> renderToBitmap ();
if (bitmap. isNull ())
return - 1 ;
bitmap. writeToPng ( " tiger.png " );
return 0 ;
}
LunaSVG 支援 SVG 1.1 和 SVG 1.2 Tiny 規格中概述的幾乎所有圖形功能。主要的例外是動畫、濾鏡和腳本。由於LunaSVG是為靜態渲染而設計的,因此未來不太可能支援動畫。但是,可以新增對過濾器的支援。它目前處理多種元素,包括:
<a>
<circle>
<clipPath>
<defs>
<ellipse>
<g>
<image>
<line>
<linearGradient>
<marker>
標記> <mask>
<path>
<pattern>
< <polygon>
<polyline>
> <徑向<radialGradient>
<rect>
<stop>
<style>
<svg>
<symbol>
<text>
<tspan>
<use>
請依照以下步驟使用 CMake 或 Meson 安裝 LunaSVG。
git clone https://github.com/sammycage/lunasvg.git
cd lunasvg
cmake -B build .
cmake --build build
cmake --install build
安裝 LunaSVG 後,您可以使用find_package
將庫包含在 CMake 專案中:
find_package (lunasvg REQUIRED)
# Link LunaSVG to your target
target_link_libraries (your_target_name PRIVATE lunasvg::lunasvg)
或者,您可以使用 CMake 的FetchContent
將 LunaSVG 直接包含在您的專案中,而無需先安裝它:
include (FetchContent)
FetchContent_Declare(
lunasvg
GIT_REPOSITORY https://github.com/sammycage/lunasvg.git
GIT_TAG master # Specify the desired branch or tag
)
FetchContent_MakeAvailable(lunasvg)
# Link LunaSVG to your target
target_link_libraries (your_target_name PRIVATE lunasvg::lunasvg)
將your_target_name
替換為可執行檔或庫目標的名稱。
git clone https://github.com/sammycage/lunasvg.git
cd lunasvg
meson setup build
meson compile -C build
meson install -C build
安裝 LunaSVG 後,您可以使用dependency
函數將該庫包含在 Meson 專案中:
lunasvg_dep = dependency ( ' lunasvg ' , required : true )
或者,將lunasvg.wrap
添加到您的subprojects
目錄中,以將 LunaSVG 直接包含在您的專案中,而無需先安裝它。建立一個名為lunasvg.wrap
的文件,其中包含以下內容:
[wrap-git]
url = https://github.com/sammycage/lunasvg.git
revision = head
depth = 1
[provide]
lunasvg = lunasvg_dep
您可以使用以下命令從回退中檢索依賴項:
lunasvg_dep = dependency ( ' lunasvg ' , fallback : [ ' lunasvg ' , ' lunasvg_dep ' ])
LunaSVG 提供了一個命令列工具svg2png
用於將 SVG 檔案轉換為 PNG 格式。
svg2png [filename] [resolution] [bgColor]
$ svg2png input.svg
$ svg2png input.svg 512x512
$ svg2png input.svg 512x512 0xff00ffff