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