获取SVG路径的外部坐标(getBBox)?

时间:2011-06-29 18:16:01

标签: php path svg

我需要在PHP中获取SVG路径的坐标(左上角和宽度/高度的x,y)。

我的意思是SVG文件的路径节点中的d属性,有点像这样:

<path d="M 100 100 L 300 100 L 200 300 z" />

我自己的路径非常复杂(有些具有绝对和/或相对坐标,可能的曲线等)。

PHP中是否有用于此类工作的库?

4 个答案:

答案 0 :(得分:1)

我一直在寻找解决方案,这是迄今为止我发现的最好的解决方案: http://rrbits.com/epb/2011/02/06/get-the-bounding-box-of-an-svg-path/

它将SVG转换为位图,然后使用ImageMagic找到bbox。一直在考虑使用d坐标自己写一个,但我担心它会在曲线等上失败。

答案 1 :(得分:1)

我认为这个问题的解决方案非常简单,一定是错误的;)。但是,虽然我没试过,但对我来说看起来不错。只需在服务器上安装inkscape,然后运行:

inkscape --without-gui --query-all /path/to/doc.svg

根据帮助,这将是List id,x,y,w,h for all objects - 听起来像我需要的,以及这里要求的内容!样本输出:

Layer_1,1.8032746e-06,-0.002,780.37099,455.91999
g4,0.090994976,-72.489183,72.445768,72.454697
polygon6,2.125,-70.896,69,69
polygon8,2.125,-70.896,69,69
g10,0.090994976,-72.489183,64.778768,3.5796973
path12,61.423995,-72.489183,3.4457675,3.5796973
path14,53.756995,-72.489183,3.4457675,3.5796973
path16,46.090995,-72.489183,3.4457675,3.5796973
path18,38.423995,-72.489183,3.4457675,3.5796973
....

这足以快速调用Web请求,但如果你有很多负载,你可以很容易地将它推送到后台进程。

答案 2 :(得分:1)

如果您的形状不使用弧形或贝塞尔曲线(许多形状实际上使用直线来近似曲线),那么您可以使用此PHP函数来计算边界框:http://pastebin.com/8eLQccbg

答案 3 :(得分:0)

不是纯PHP,但对我有用的选项是使用http://phantomjs.org来获取SVG边界框。