| [отпатрулированная версия] | [непроверенная версия] |
|
|
| |
'''SVG''' (от {{lang-en|'''S'''calable '''V'''ector '''G'''raphics}} — [[масштабируемость|масштабируемая]] [[векторная графика]]) — [[язык разметки]] масштабируемой векторной графики, созданный [[W3C|Консорциумом Всемирной паутины (W3C)]] и входящий в подмножество расширяемого языка разметки [[XML]], предназначен для описания двумерной векторной и смешанной векторно/[[растровая графика|растровой]] графики в формате XML. Поддерживает как неподвижную, так и анимированную интерактивную графику — или, в иных терминах, декларативную и скриптовую. Не поддерживает описание трёхмерных объектов (не путать с имитацией трёхмерности путём светотени). Это открытый стандарт, который является рекомендацией консорциума W3C — организации, разработавшей такие стандарты, как [[HTML]] и [[XHTML]]. В основу SVG легли языки разметки [[VML]] и [[PGML]]. Разрабатывается с 1999 года. В 2001 году вышла версия 1.0, в 2011 — версия 1.1, которая остаётся актуальной до сегодняшнего дня. В настоящее время в активной разработке находится версия 2. |
|
'''SVG''' (от {{lang-en|'''S'''calable '''V'''ector '''G'''raphics}} — [[масштабируемость|масштабируемая]] [[векторная графика]]) — [[язык разметки]] масштабируемой векторной графики, созданный [[W3C|Консорциумом Всемирной паутины (W3C)]] и входящий в подмножество расширяемого языка разметки [[XML]], предназначен для описания двумерной векторной и смешанной векторно/[[растровая графика|растровой]] графики в формате XML. Поддерживает как неподвижную, так и анимированную интерактивную графику — или, в иных терминах, декларативную и скриптовую. Не поддерживает описание трёхмерных объектов (не путать с имитацией трёхмерности путём светотени). Это открытый стандарт, который является рекомендацией консорциума W3C — организации, разработавшей такие стандарты, как [[HTML]] и [[XHTML]]. В основу SVG легли языки разметки [[VML]] и [[PGML]]. Разрабатывается с 1999 года. В 2001 году вышла версия 1.0, в 2011 — версия 1.1, которая остаётся актуальной до сегодняшнего дня. В настоящее время в активной разработке находится версия 2. |
| |
|
|
|
| − |
[[Файл:Svg.svg|300px|right|thumb|Пример векторного изображения в этом формате, который демонстрирует прозрачность, [[градиент (компьютерная графика)|градиентную заливку]], разнообразные контуры и текст.]] |
+ |
[[Файл:Svg.svg|300px|right|thumb|Пример векторного изображения в этом формате, который демонстрирует прозрачность, [[градиент (компьютерная графика)|градиентную заливку]], разнообразные контуры и текст. И ещё один [https://upload.wikimedia.org/wikipedia/commons/7/78/FusionintheSun.svg Пример файла в формате svg] ]] |
| |
|
|
|
| |
== Возможности языка == |
|
== Возможности языка == |
| |
⚫ |
* Описание путей ({{lang-en|path}}). Позволяет задать любую фигуру компактной строкой, описывающей путь от начальной точки до конечной через любые промежуточные координаты. Строка с данными задаётся атрибутом <code>d</code> тега <code>path</code> и содержит команды, закодированные набором букв и чисел. Буква определяет тип команды, числа — её параметры (чаще всего — координаты). Команды позволяют описывать фигуры, состоящие из [[Отрезок|отрезков прямых]] (<code>L</code>, <code>H</code>, <code>V</code>), [[Кривая Безье|кривых Безье]] (<code>C</code>, <code>S</code>, <code>Q</code>, <code>T</code>) и дуг (<code>A</code>). Пример, описывающий звезду из 5 линий, содержит строку данных с командами <code>M</code> ({{lang-en|moveto}} — переместиться к) и <code>L</code> ({{lang-en|lineto}} — нарисовать линию к), содержащими в качестве аргументов координаты точек по X и Y. В версиях SVG до 1.2 включительно описание путей возможно только в пикселях. |
| − |
|
|
| ⚫ |
* Описание путей ({{lang-en|path}}). Позволяет задать любую фигуру компактной строкой, описывающей путь от начальной точки до конечной через любые промежуточные координаты. Строка с данными задаётся атрибутом <code>d</code> тега <code>path</code> и содержит команды, закодированные набором букв и чисел. Буква определяет тип команды, числа — её параметры (чаще всего — координаты). Команды позволяют описывать фигуры, состоящие из [[Отрезок|отрезков прямых]] (<code>L</code>, <code>H</code>, <code>V</code>), [[Кривая Безье|кривых Безье]] (<code>C</code>, <code>S</code>, <code>Q</code>, <code>T</code>) и дуг (<code>A</code>). Пример, описывающий звезду из 5 линий, содержит строку данных с командами <code>M</code> ({{lang-en|moveto}} — переместить) и <code>L</code> ({{lang-en|lineto}} — нарисовать линию), содержащими в качестве аргументов координаты точек по X и Y. В версиях SVG до 1.2 включительно описание путей возможно только в пикселях. |
|
| |
<source lang="xml"> |
|
<source lang="xml"> |
| |
<path fill="none" |
|
<path fill="none" |
| − |
stroke="black" d="M 227 239 L 328 90 L 346 250 L 201 124 L 410 150 L 228 238" /> |
+ |
stroke="black" d="M 228 238 L 328 90 L 346 250 L 201 124 L 410 150 L 228 238" /> |
| |
</source> |
|
</source> |
| |
* Описание основных геометрических фигур (многоугольники, прямоугольники, окружности и т. п.). |
|
* Описание основных геометрических фигур (многоугольники, прямоугольники, окружности и т. п.). |
| |
* Широкий спектр визуальных свойств, которые можно применить к фигурам и путям: окраска, прозрачность, скругление углов и т. д. |
|
* Широкий спектр визуальных свойств, которые можно применить к фигурам и путям: окраска, прозрачность, скругление углов и т. д. |
| − |
* [[Интерактивность]]. На каждый отдельный элемент и на целое изображение можно повесить обработчик событий (клик, перемещение, нажатие клавиши и т.д), таким образом, пользователь может управлять рисунком (например — перемещать мышкой некоторые элементы<ref>[http://graphing.ru/d/ Пример страницы, позволяющей создавать и редактировать SVG в браузере] {{ref-ru}}</ref>). |
+ |
* [[Интерактивность]]. На каждый отдельный элемент и на целое изображение можно повесить обработчик событий (клик, перемещение, нажатие клавиши и т.д), таким образом, пользователь может управлять рисунком (например — перемещать мышкой некоторые элементы<ref>[http://graphing.ru/d/ Пример страницы, позволяющей создавать и редактировать SVG в браузере]{{ref-ru}}</ref>). |
| − |
* Анимация и сценарии. С помощью [[ECMAScript]] или [[JavaScript]] можно описывать даже самые сложные сценарии, связанные с математическими вычислениями координат и пропорций фигур. Вместе с интерактивностью и [[SMIL]] анимацией это даёт очень широкие возможности для разработчиков веб-графики. |
+ |
* Анимация и сценарии. С помощью [[ECMAScript]] или [[JavaScript]] можно описывать даже самые сложные сценарии, связанные с математическими вычислениями координат и пропорций фигур. Вместе с интерактивностью и [[SMIL]]-анимацией это даёт очень широкие возможности для разработчиков веб-графики. |
| |
|
|
|
| |
== Достоинства формата == |
|
== Достоинства формата == |
|
|
| |
* [[Мультипликация|Анимация]] реализована в SVG с помощью языка [[SMIL]] (Synchronized Multimedia Integration Language), разработанного также консорциумом W3C. Поддерживаются скриптовые языки на основе спецификации [[ECMAScript]]. SVG-элементами можно управлять с помощью [[JavaScript]]. Применение [[скрипт]]ов и анимации в SVG позволяет создавать динамичную и интерактивную графику. В SVG обеспечивается событийная модель, отслеживаются события (''загрузка страницы, изменение её параметров, события мыши, клавиатуры и др.'') Анимация может запускаться по определённому событию (например ''«onmouseover» или «onclick»''), что придаёт графике интерактивность. У каждого элемента есть свои собственные события, к которым можно привязывать отдельные скрипты. |
|
* [[Мультипликация|Анимация]] реализована в SVG с помощью языка [[SMIL]] (Synchronized Multimedia Integration Language), разработанного также консорциумом W3C. Поддерживаются скриптовые языки на основе спецификации [[ECMAScript]]. SVG-элементами можно управлять с помощью [[JavaScript]]. Применение [[скрипт]]ов и анимации в SVG позволяет создавать динамичную и интерактивную графику. В SVG обеспечивается событийная модель, отслеживаются события (''загрузка страницы, изменение её параметров, события мыши, клавиатуры и др.'') Анимация может запускаться по определённому событию (например ''«onmouseover» или «onclick»''), что придаёт графике интерактивность. У каждого элемента есть свои собственные события, к которым можно привязывать отдельные скрипты. |
| |
* SVG — открытый стандарт. В отличие от некоторых других форматов, SVG не является чьей-либо собственностью. |
|
* SVG — открытый стандарт. В отличие от некоторых других форматов, SVG не является чьей-либо собственностью. |
| − |
* SVG-документы легко интегрируются с HTML и XHTML документами. Внешние SVG подключаются через тег '''<object>''', значение атрибута data — имя файла с расширением «.svg», содержащего разметку SVG, type — MIME-тип, то есть image/svg+xml. Атрибуты width и height определяют размеры области SVG по горизонтали и по вертикали. Элементы SVG совместимы с HTML и DHTML. |
+ |
* SVG-документы легко интегрируются с HTML- и XHTML-документами. Внешние SVG подключаются через тег '''<object>''', значение атрибута data — имя файла с расширением «.svg», содержащего разметку SVG, и имеющего [[Список MIME-типов|MIME-тип]] image/svg+xml. Атрибуты width и height определяют размеры области SVG по горизонтали и по вертикали. Элементы SVG совместимы с HTML и DHTML. |
| |
* Совместимость с [[Каскадная таблица стилей|CSS]] ({{lang-en|Cascading Style Sheets}}). Отображением (форматированием и декорированием) SVG-элементов можно управлять с помощью таблицы стилей CSS 2.0 и её расширений, либо напрямую с помощью атрибутов SVG-элементов. |
|
* Совместимость с [[Каскадная таблица стилей|CSS]] ({{lang-en|Cascading Style Sheets}}). Отображением (форматированием и декорированием) SVG-элементов можно управлять с помощью таблицы стилей CSS 2.0 и её расширений, либо напрямую с помощью атрибутов SVG-элементов. |
| |
* SVG предоставляет все преимущества [[XML]]: |
|
* SVG предоставляет все преимущества [[XML]]: |
|
|
| |
|
|
|
| |
== Недостатки формата == |
|
== Недостатки формата == |
| |
+ |
* Полностью отсутствует поддержка трёхмерной графики |
| − |
* SVG наследует все недостатки [[XML]], такие как большой размер файла (впрочем, последний компенсируется существованием сжатого формата [[SVGZ]], однако его использование на данный момент затруднено, так как SVGZ не имеет собственного mime-type). |
+ |
*SVG наследует все недостатки [[XML]], такие как большой размер файла (впрочем, последний компенсируется существованием сжатого формата [[SVGZ]], однако его использование на данный момент затруднено, так как SVGZ не имеет собственного [[Список MIME-типов|MIME-типа]]). |
| |
* Сложность использования в крупных картографических приложениях из-за того, что для правильного отображения маленькой части изображения документ необходимо прочитать целиком. |
|
* Сложность использования в крупных картографических приложениях из-за того, что для правильного отображения маленькой части изображения документ необходимо прочитать целиком. |
| |
* Чем больше в изображении мелких деталей, тем быстрее растёт размер SVG-данных. Предельный случай — когда изображение представляет собой [[белый шум]]. В этом случае SVG не только не даёт никаких преимуществ в размере файла, но даже даёт проигрыш по отношению к растровому формату. На практике, SVG становится невыгоден уже задолго до того, как изображение дойдёт до стадии белого шума. |
|
* Чем больше в изображении мелких деталей, тем быстрее растёт размер SVG-данных. Предельный случай — когда изображение представляет собой [[белый шум]]. В этом случае SVG не только не даёт никаких преимуществ в размере файла, но даже даёт проигрыш по отношению к растровому формату. На практике, SVG становится невыгоден уже задолго до того, как изображение дойдёт до стадии белого шума. |
|
|
| |
|
|
|
| |
== SVGZ == |
|
== SVGZ == |
| − |
Поскольку код SVG занимает довольно много места, была создана «обёртка» SVGZ, когда SVG сжимают с помощью [[gzip]], а полученному файлу присваивают расширение «SVGZ». |
+ |
Поскольку код SVG занимает довольно много места, была создана «обёртка» SVGZ, когда SVG сжимают с помощью [[gzip]], а полученному файлу присваивают расширение «.svgz». |
| |
|
|
|
| |
SVG хорошо [[Сжатие без потерь|сжимается]], поскольку это текстовый [[XML]]-документ, имеющий регулярную структуру. |
|
SVG хорошо [[Сжатие без потерь|сжимается]], поскольку это текстовый [[XML]]-документ, имеющий регулярную структуру. |
|
|
| |
* [[Adobe Illustrator]] версии от 10.0 — векторный графический редактор. |
|
* [[Adobe Illustrator]] версии от 10.0 — векторный графический редактор. |
| |
* [[CorelDRAW]] — векторный графический редактор. |
|
* [[CorelDRAW]] — векторный графический редактор. |
| − |
* [[GIMP]] — [[свободное программное обеспечение|свободный]] [[кроссплатформенное программное обеспечение|кроссплатформенный]] [[растровый графический редактор]]; позволяет открывать SVG файлы, при импорте происходит растеризация с заданным разрешением. |
+ |
* [[GIMP]] — [[свободное программное обеспечение|свободный]] [[кроссплатформенное программное обеспечение|кроссплатформенный]] [[растровый графический редактор]]; позволяет открывать SVG-файлы, при импорте происходит растеризация с заданным разрешением. |
| |
* [[Inkscape]] — [[свободное программное обеспечение|свободный]] [[кроссплатформенное программное обеспечение|кроссплатформенный]] [[векторный графический редактор]]; использует SVG как основной формат. |
|
* [[Inkscape]] — [[свободное программное обеспечение|свободный]] [[кроссплатформенное программное обеспечение|кроссплатформенный]] [[векторный графический редактор]]; использует SVG как основной формат. |
| |
* [[LibreOffice Draw]], [[OpenOffice.org Draw]] — позволяет экспортировать и импортировать SVG-файлы. |
|
* [[LibreOffice Draw]], [[OpenOffice.org Draw]] — позволяет экспортировать и импортировать SVG-файлы. |
| |
* [[Microsoft Visio|Microsoft Office Visio]] — способен сохранять проекты в формат SVG. При этом, файлы SVG, созданные в Microsoft Visio, некорректно отображаются при загрузке на Wikimedia. |
|
* [[Microsoft Visio|Microsoft Office Visio]] — способен сохранять проекты в формат SVG. При этом, файлы SVG, созданные в Microsoft Visio, некорректно отображаются при загрузке на Wikimedia. |
| |
* [[sK1]] — [[свободное программное обеспечение|свободный]] векторный графический редактор. |
|
* [[sK1]] — [[свободное программное обеспечение|свободный]] векторный графический редактор. |
| − |
* [[Sketch]] — только для [[macOS]]. |
+ |
* [[Sketch]] — только для [[macOS]]. |
| |
* [[Sketsa SVG Editor]] — редактор SVG-файлов. |
|
* [[Sketsa SVG Editor]] — редактор SVG-файлов. |
| − |
* [https://code.google.com/p/svg-edit/ svg-edit] — онлайн редактор для современных браузеров. Базируется на JavaScript. |
+ |
* [https://github.com/SVG-Edit/svgedit svg-edit] — онлайн редактор для современных браузеров. Базируется на JavaScript. |
| |
+ |
|
| |
=== Инструменты и библиотеки === |
|
=== Инструменты и библиотеки === |
| − |
* [[Batik (software)|Batik]] — [[Java]] библиотека для генерации, отрисовки и различных манипуляций изображениями в SVG формате и основанный на этой библиотеке SVG-браузер — Squiggle<ref name="xmlgraphics">[http://xmlgraphics.apache.org/batik/tools/browser.html Squiggle].</ref>. |
+ |
* [[Batik (software)|Batik]] — [[Java]]-библиотека для генерации, отрисовки и различных манипуляций изображениями в SVG-формате и основанный на этой библиотеке SVG-браузер — Squiggle<ref name="xmlgraphics">[http://xmlgraphics.apache.org/batik/tools/browser.html Squiggle].</ref>. |
| |
* [[MetaPost]] — язык программирования, используемый для создания графических иллюстраций. |
|
* [[MetaPost]] — язык программирования, используемый для создания графических иллюстраций. |
| − |
* [[librsvg]] — библиотека, используемая в [[MediaWiki]] для работы с SVG<ref>[http://www.mediawiki.org/wiki/Manual:Image_Administration#SVG Manual:Image Administration — MediaWiki<!-- Заголовок добавлен ботом -->] {{ref-en}}</ref><ref>Однако, в стандартном дистрибутиве MediaWiki, по умолчанию прописан ImageMagick, что приводит к ошибкам в преобразовании SVG в PNG, например, неверные границы и отсутствие прозрачного фона в получаемом файле PNG. Устраняется с помощью ''' $wgSVGConverter = 'rsvg'.'''</ref>. |
+ |
* [[librsvg]] — библиотека, используемая в [[MediaWiki]] для работы с SVG<ref>[http://www.mediawiki.org/wiki/Manual:Image_Administration#SVG Manual:Image Administration — MediaWiki<!-- Заголовок добавлен ботом -->]{{ref-en}}</ref><ref>Однако, в стандартном дистрибутиве MediaWiki по умолчанию прописан ImageMagick, что приводит к ошибкам в преобразовании SVG в PNG, например, неверные границы и отсутствие прозрачного фона в получаемом файле PNG. Устраняется с помощью ''' $wgSVGConverter = 'rsvg'.'''</ref>. |
| − |
* [http://svgextension.codeplex.com/ SVG Viewer Extension for Windows Explorer] — расширение для [[Проводник Windows|проводника Windows]], позволяющее просматривать в нём SVG файлы в виде эскизов. |
+ |
* [http://svgextension.codeplex.com/ SVG Viewer Extension for Windows Explorer] — расширение для [[Проводник Windows|проводника Windows]], позволяющее просматривать в нём SVG-файлы в виде эскизов. |
| − |
* [http://snapsvg.io/about/ Snap] — библиотека JavaScript для работы с <abbr>SVG.</abbr> |
+ |
* [http://snapsvg.io/about/ Snap] — библиотека JavaScript для работы с <abbr>SVG.</abbr> |
| |
+ |
|
| |
== Примечания == |
|
== Примечания == |
| |
{{примечания}} |
|
{{примечания}} |
|
|
| |
== Ссылки == |
|
== Ссылки == |
| |
* [http://www.w3.org/Graphics/SVG/ Официальный раздел SVG на сайте W3 консорциума]{{ref-en}} |
|
* [http://www.w3.org/Graphics/SVG/ Официальный раздел SVG на сайте W3 консорциума]{{ref-en}} |
| − |
* [http://www.opera.com/docs/specs/presto26/svg/elements/ Список] поддерживаемых элементов SVG в [[браузер]]е [[Opera]]{{ref-en}} |
+ |
* [https://web.archive.org/web/20100915002209/http://www.opera.com/docs/specs/presto26/svg/elements/ Список] поддерживаемых элементов SVG в [[браузер]]е [[Opera]]{{ref-en}} |
| |
* [https://dev.opera.com/tags/svg/ Статьи о возможностях SVG от разработчиков Оперы]{{ref-en}} |
|
* [https://dev.opera.com/tags/svg/ Статьи о возможностях SVG от разработчиков Оперы]{{ref-en}} |
| |
* [https://web.archive.org/web/20060702060110/http://www.mozilla.org/projects/svg/faq.html FAQ]{{ref-en}} {{nobr|о реализации SVG}} {{nobr|1=в [[браузер]]е}} {{nobr|1=[[Mozilla Firefox]]}} |
|
* [https://web.archive.org/web/20060702060110/http://www.mozilla.org/projects/svg/faq.html FAQ]{{ref-en}} {{nobr|о реализации SVG}} {{nobr|1=в [[браузер]]е}} {{nobr|1=[[Mozilla Firefox]]}} |
| − |
* [http://www.adobe.com/svg/ Страница]{{ref-en}} формата SVG на сайте [[Adobe]] |
+ |
* [https://web.archive.org/web/20061012050739/http://www.adobe.com/svg/ Страница]{{ref-en}} формата SVG на сайте [[Adobe]] |
| |
* [http://xml.nsu.ru/extra/svgintro_0.xml Школы консорциума W3C. Введение в SVG] {{ref-ru}} |
|
* [http://xml.nsu.ru/extra/svgintro_0.xml Школы консорциума W3C. Введение в SVG] {{ref-ru}} |
| − |
* [http://www.openclipart.org/ Открытые SVG клипарты (openclipart.org)] |
+ |
* [https://web.archive.org/web/20050115061851/http://www.openclipart.org/ Открытые SVG клипарты (openclipart.org)] |
| |
* [http://v.sytnik.lviv.ua/ru/tags/svg-0/ Описание чертежей в формате SVG (v.sytnik.lviv.ua)] {{ref-ru}} |
|
* [http://v.sytnik.lviv.ua/ru/tags/svg-0/ Описание чертежей в формате SVG (v.sytnik.lviv.ua)] {{ref-ru}} |
| |
* [http://www.cmsmagazine.ru/library/items/graphical_design/how-to-use-svg/ Как использовать SVG для создания веб-анимации под все типы устройств] |
|
* [http://www.cmsmagazine.ru/library/items/graphical_design/how-to-use-svg/ Как использовать SVG для создания веб-анимации под все типы устройств] |