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