我想在OS X上使用C ++解析SVG文件,并且需要一个库。它应该是简单,轻量级的,并且不应有很多依赖关系。我的SVG文件也很简单-它们仅包含简单的形状和路径,例如矩形和转换信息。您知道任何解析器吗?

注意:我想超越XML结构解析的形状信息,例如矩形宽度,高度和路径点,浮点数等。我已经尝试过libtinysvg,但不会发生解析大多数w3c示例,并具有一些自己的依赖项!

评论

解析svg很简单;这只是一个xml。但是,解释它是另一回事。任何值得发布的库都将尝试完全合理地解释它,但这需要功能相当强大的矢量绘图库,该库将显示为依赖项。

通过标签和文本,我认为您是想说您更喜欢C ++解决方案,但可以与C一起使用-我正确吗?并且,由于这是一个古老的问题,您是否找到了解决方案?你可以分享吗?

#1 楼

新的SVG ++库是C ++中SVG读取的不错选择,除了它不是轻量级的并且需要Boost库。但是由于它是仅标头的库,并且仅使用Boost中的仅标头的库,因此您只需要获取SVG ++和Boost并将它们添加为包含路径,而无需构建。

#2 楼

QT框架包括QT SVG,该模块能够生成和呈现SVG文件。

#3 楼

您有几种选择:




来自Cairo Graphics项目的librsvg
扩展libsvgtiny以满足您的需求
从Amaya提取SVG层
/>
使用xml解析器,然后根据需要解析属性,以获取C ++和重要依赖项:QT,Webkit或Chromium

关于libsvgtiny的说明:它是由Netsurf浏览器开发的项目,并且具有许多其他项目可能捆绑在一起的非常小的依赖关系,但是它们有意地分离出不同的功能(它们还解析html,xml和css,因此常见的解析位是一个单独的库)。我已经从nsfb的示例代码中构建了一个基本的svg查看器,该示例代码使用musl-libc与libxcb后端静态编译到300kb以下(glibc + libx11 + librsvg +它们的所有依赖关系都超过10倍)

关于librsvg的注意事项:它是最常用的,但是具有更多的依赖项。首先。 9.x之前的版本仅需要gtk + -1.X(现在是跨平台的Wx)

关于QT的注意事项:如果您使用的是C ++,则需要跨平台gui,那么这可能是一个不错的选择选择,因为许多C ++ gui工具箱(fltk,FOX等)没有内置的svg功能。

webkit或内置的铬:这些工具是跨平台的,具有很多杀伤力。您不仅会获得SVG,而且还会获得很多您可能不需要的东西...但是由于所有程序都会不断发展,直到它们可以发送邮件为止,这将使您在以后的游戏中处于领先地位。

Xml解析器:太多了,但是您可以从tinysvg中提取一些代码以获得其他属性

我的建议:从svgtiny开始并添加所需的任何功能。 Netsurf开发人员非常开放并且乐于助人。

#4 楼

SVG是XML的一种特殊类型(源)。因此,任何允许您解析XML的C / C ++库都将允许您解析SVG。

发布了许多库,作为对C ++最佳开放XML解析器问题的解答。其中一些是


RapidXML
pugixml
TinyXML-2


评论


不幸的是,SVG的所有有趣部分都存储在其XML模式的属性中,因此,简单的XML解析器本质上毫无用处,因为它仅完成SVG解释工作的10%。

–cheshirekow
20-2-4在21:28