Увеличить размер SVG без CSS

#php #html #css #svg

#php #HTML #css #svg

Вопрос:

У меня есть следующий SVG-файл, который включает полилинию

 <?xml version="1.0" encoding="utf-8"?>
<svg 
    width="280"
    height="280"
    viewBox="0 0 140 140"
    stroke="blue"
    fill="none">
<polyline points="21,14 18,14 15,7 10,17 7,11 5,14 3,14" />
</svg>  

Исходный размер составляет 48×48 пикселей, я пытаюсь увеличить общий масштаб SVG до 280×280 пикселей (прежде чем я отправлю его для отображения в формате PNG).

Я попытался увеличить параметры width, height и viewBox, однако полилинии, очевидно, не совпадают по размеру. Есть ли какой-нибудь способ сделать это?

Комментарии:

1. Вместо этого я бы использовал это окно просмотра: viewBox =»3 7 18 10″

2. Это делает трюк, не хотите ли объяснить и создать ответ на это? Также достижим ли этот результат в динамическом (с кодом?) таким образом, поскольку у меня будет много svg, которые будут передавать этот код.

Ответ №1:

В вашем примере я добавил границу к элементу svg. Теперь вы можете видеть, что происходит. Графика крошечная по сравнению с окном просмотра. Чтобы сделать это правильно, вам нужно знать ограничительную рамку многоугольника let bb = document.querySelector("polyline").getBBox(); и использовать результат для значения окна просмотра

 let bb = document.querySelector("polyline").getBBox();
console.log(bb)  
 svg{border:solid}  
 <?xml version="1.0" encoding="utf-8"?>
<svg 
    width="280"
    height="280"
    viewBox="0 0 140 140"
    stroke="blue"
    fill="none">
<polyline points="21,14 18,14 15,7 10,17 7,11 5,14 3,14" />
</svg>  

Ограничивающий прямоугольник ломаной линии:

 {
  "x": 3,
  "y": 7,
  "width": 18,
  "height": 10
}
  

Я использую эти значения для создания нового значения окна просмотра.

Далее идет пример, в котором я меняю viewBox на viewBox=»3 7 18 10″. Пожалуйста, обратите внимание, что теперь svg-элемент имеет другое соотношение сторон. Элемент svg имеет квадратную форму, а окно просмотра имеет ширину 18 и высоту 10. По умолчанию значение preserveAspectRatio xMidYMid выравнивает среднее значение Y поля просмотра элемента со средним значением Y области просмотра.

 svg{border:solid}  
 <?xml version="1.0" encoding="utf-8"?>
<svg 
    width="280"
    height="280"
    viewBox="3 7 18 10"
    stroke="blue"
    fill="none">
<polyline points="21,14 18,14 15,7 10,17 7,11 5,14 3,14" />
</svg>  

Комментарии:

1. Спасибо! Итак, чтобы вычислить ограничивающую рамку, мне нужен javascript? Поскольку мой синтаксический анализ svg происходит на сервере (php).

2. Зависит от SVG. В случае этого <polyline> вы этого не сделаете. Посмотрев на него, вы можете увидеть, каковы минимальные и максимальные координаты X (3 и 21) и координаты Y (7 и 17). Для других элементов, таких как a <path> , это будет сложнее сделать с помощью PHP. Но я не знаю, какие библиотеки синтаксического анализа SVG доступны для PHP. Возможно, вы могли бы вызвать отдельную программу, написанную, например, на C , которая использует библиотеку, такую как Batik.