【问题标题】:Get outer coordinates of a SVG path (getBBox)?获取 SVG 路径的外部坐标 (getBBox)?
【发布时间】:2011-09-25 09:39:25
【问题描述】:

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

我的意思是 SVG 文件的路径节点中的 d 属性,如下所示:

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

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

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

【问题讨论】:

    标签: php path svg


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我认为这个问题的解决方案是如此简单,以至于它一定是错误的;)。但是,虽然我没有尝试过,但它对我来说看起来还不错。只需在您的服务器上安装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
      ....
      

      这对于调用网络请求来说已经足够快了,但是如果你有太多的负载,你可以很容易地将它推送到后台进程。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2014-05-03
            • 2015-05-05
            • 2015-10-29
            • 1970-01-01
            • 1970-01-01
            • 2012-04-25
            • 2022-01-13
            • 2017-11-26
            • 2012-08-20
            相关资源
            最近更新 更多