Я работаю над скриптом PHP, который генерирует jpg-обои из SVG-файла в соответствии с разрешением экрана посетителя. Обои состоят из кругового градиента (прямоугольника) и дорожки поверх него. Как бы вы шли по горизонтали и вертикали по вертикали к прямоугольнику? Помните, что размер и пропорции прямоугольника не являются постоянными. Должен ли я отделять фон и путь от разных svg-файлов или есть простой способ центрирования путей? Может быть, рамки?Программный центрирующий путь svg
ответ
Это достигается путем использования вложенных элементов <svg>
и атрибута preserveAspectRatio
. Поместите свой фон в внешний svg и ваш путь во внутреннем.
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%">
<rect id="background" width="100%" height="100%" fill="grey"/>
<svg preserveAspectRatio="xMidYMid meet" viewBox="0 0 30 40" width="100%" height="100%">
<g>
<circle cx="15" cy="20" r="10" fill="yellow"/>
<circle cx="12" cy="17" r="1.5" fill="black"/>
<circle cx="18" cy="17" r="1.5" fill="black"/>
<path d="M 10 23 A 8 13 0 0 0 20 23" stroke="black" stroke-width="2" fill="none"/>
</g>
</svg>
</svg>
Выполнить этот фрагмент и попытайтесь изменить размеры окна.
Чтобы это работало, все, что вам нужно, это убедиться, что атрибут viewBox на внутреннем элементе <svg>
правильно установлен.
Если вы знаете координаты путей, вы можете взять общее количество координат x/y и делить на количество координат, это даст вам среднее положение для набора координат. Затем смещайте каждую координату по координатам на половину ширины/высоты квадрата плюс любое смещение, минус разность между центром набора координат и половиной ширины/высоты квадрата.
Это должно привести к тому, что ваши координаты будут центрированы внутри квадрата, я думаю (это довольно рано здесь, и я только что начал свой первый кофе, чтобы я мог ошибаться). Это, конечно, предполагает, что вы знаете все переменные в игре (ширина/высота квадрата, любое применяемое смещение и координаты пути).
Ограничивающая коробка svgElement.getBBox() может помочь.
- 1. Создать программный элемент SVG?
- 2. Отзывчивый дизайн: центрирующий текст в SVG
- 3. Python - программный путь к файлу?
- 4. SVG путь, выяснить, как путь рисуется файл SVG
- 5. Динамически центрирующий фильтрованный узел в элементе SVG в D3
- 6. Как масштабировать SVG-путь
- 7. Незакрытый путь SVG закрыт
- 8. Загрузить svg как путь
- 9. Путь SVG не отображается
- 10. SVG Путь полукруг (Raphael)
- 11. Связывание SVG Путь
- 12. Изменить SVG путь
- 13. Центр Путь внутри SVG
- 14. Продлить SVG путь
- 15. SVG Путь и морфинг
- 16. SVG анимация/грязный путь
- 17. SVG путь с границей
- 18. svg путь рендеринга скорость
- 19. SVG путь не подключен
- 20. Обратный путь SVG
- 21. jQuery SVG путь копирования в другой SVG
- 22. Как найти программный путь USB-накопителя?
- 23. Как добавить программный путь к программному пути?
- 24. Программный путь к пути пакета nuget
- 25. Программный логический путь приложения IIS 7
- 26. C# Как программный путь установки SQL Server?
- 27. android gradle Как получить программный путь модуля?
- 28. SVG обнаружения Путь из файла
- 29. SVG Путь перемещения анимации оси
- 30. SVG путь не соблюдая пропорции
Добро пожаловать в S.O. Это сообщество призвано помочь вам в решении конкретной проблемы и в коде, который вы пробовали. Что вы пытались решить вашу проблему? –