Получить внешние координаты пути SVG (getBBox)? - PullRequest
2 голосов
/ 29 июня 2011

Мне нужно получить координаты (x, y верхнего левого угла и ширины / высоты) пути SVG в PHP.

Я имею в виду d-атрибут в путевом узле SVG-файла, что-то вроде этого:

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

Мои пути довольно сложны, чтобы сделать это самостоятельно (некоторые имеют абсолютные и / или относительные координаты, возможные кривые и т. Д.)

Существуют ли библиотеки для такого рода работы в PHP?

Ответы [ 4 ]

1 голос
/ 24 ноября 2012

Если ваша фигура не использует дуги или безье (многие фигуры на самом деле используют прямые линии для аппроксимации кривых), вы можете использовать эту функцию PHP для вычисления ограничивающей рамки: http://pastebin.com/8eLQccbg

1 голос
/ 09 апреля 2012

Я думаю, что это решение проблемы настолько простое, что оно должно быть неправильным ;). Но, хотя я не пробовал, это выглядит довольно хорошо для меня. Просто установите 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
....

Это достаточно быстро, чтобы вызвать веб-запрос, но если вы сильно загружены, вы можете легко перенести его в фоновый процесс.

1 голос
/ 08 августа 2011

Я также искал решение для этого, и это лучшее, что я нашел до сих пор: http://rrbits.com/epb/2011/02/06/get-the-bounding-box-of-an-svg-path/

Он конвертирует SVG в растровое изображение, а затем находит bbox с помощью ImageMagic.Я думал о том, чтобы написать сам, используя координаты d, но я боюсь, что это не получится на кривых и т. Д.

0 голосов
/ 04 октября 2012

Не чистый PHP, но вариант, который работал для меня, заключался в использовании http://phantomjs.org, чтобы получить ограничивающий прямоугольник SVG.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...