В чем разница между SVG и HTML5 Canvas? Кажется, они оба поступают со мной одинаково. По сути, они оба рисуют векторные изображения с помощью координатных точек.
Что мне не хватает? В чем основные различия между SVG и HTML5 Canvas? Почему я должен выбирать одно вместо другого?
Ответы:
См. Википедию: http://en.wikipedia.org/wiki/Canvas_element
ОБНОВЛЕНИЕ: я использую SVG из-за его возможностей языка разметки - он может обрабатываться XSLT и может содержать другую разметку в своих узлах. Точно так же я могу держать SVG в своей разметке (химия). Это позволяет мне манипулировать атрибутами SVG (например, рендерингом) с помощью комбинаций разметки. Это может быть возможно в Canvas, но я подозреваю, что это намного сложнее.
источник
SVG похож на программу «рисования». Чертеж определяется как инструкции по рисованию для каждой формы, и любая часть любой формы может быть изменена. Рисунки ориентированы на форму.
Холст похож на программу «рисования». Как только пиксели попадают на экран, это ваш рисунок. Вы не можете изменять формы, кроме как перезаписывая их другими пикселями. Картины пиксельно-ориентированные.
Для некоторых программ очень важно иметь возможность изменять рисунки; например, для создания приложений, создания диаграмм и т. д. Таким образом, SVG имеет здесь преимущество.
Для некоторых художественных программ важно иметь возможность управлять отдельными пикселями.
Получить отличную анимацию для манипуляций пользователем с помощью перетаскивания мышью проще с Canvas, чем с SVG.
Один пиксель на экране компьютера часто занимает 4 байта информации, а экран компьютера в наши дни занимает несколько мегабайт. Так что Canvas может быть неудобным, если вы хотите позволить пользователю редактировать изображение, а затем загружать его снова.
Напротив, рисование нескольких фигур, которые покрывают весь экран с использованием SVG, занимает несколько байтов, быстро загружается и может быть легко загружено снова с теми же преимуществами, что и в том направлении, что и в другом направлении. Таким образом, SVG может быть быстрее, чем Canvas.
Google внедрил Google Maps с SVG. Это дает веб-приложению высокую производительность и плавную прокрутку.
источник
Резюме высокого уровня Canvas и SVG
Холст
SVG
Для получения подробной информации прочтите http://msdn.microsoft.com/en-us/library/ie/gg193983(v=vs.85).aspx
источник
Есть разница в том, что они из себя представляют и что они для вас делают.
Чтобы уточнить формат по сравнению с API:
С помощью svg вы можете просматривать, сохранять и редактировать файл с помощью множества различных инструментов. С холстом вы просто рисуете, и ничего не сохраняется о том, что вы только что сделали, кроме изображения на экране. Вы можете анимировать и то, и другое, SVG выполняет перерисовку за вас, просто глядя на указанные элементы и атрибуты, а с холстом вы должны перерисовывать каждый кадр самостоятельно, используя API. Вы можете масштабировать и то, и другое, но SVG делает это автоматически, в то время как снова с холстом вам нужно повторно выполнить команды рисования для заданного размера.
источник
Две вещи, которые больше всего поразили меня в SVG и Canvas:
Возможность использовать Canvas без DOM, где SVG сильно зависит от DOM и по мере увеличения сложности производительность замедляется. Как в игровом дизайне.
Преимущество использования SVG в том, что разрешение остается неизменным на разных платформах, чего нет в Canvas.
Более подробная информация представлена на этом сайте. http://dev.opera.com/articles/view/svg-or-canvas-choosing-between-the-two/
источник
Это абсолютно зависит от ваших потребностей / требований.
Если вы хотите просто показать изображение / диаграмму на экране, рекомендуется использовать холст. (Пример: PNG, GIF, BMP и т. Д.)
Если вы хотите расширить возможности своей графики, например, если вы наводите указатель мыши на диаграмму, чтобы увеличить определенную область без ухудшения качества отображения, вы выбираете SVG. (Хороший пример - файлы AutoCAD, Visio, GIS).
Если вы хотите создать инструмент для создания динамической блок-схемы с коннектором формы, лучше выбрать SVG, а не CANVAS.
Когда размер экрана увеличивается, холст начинает ухудшаться, так как необходимо отрисовывать больше пикселей.
Когда количество объектов на экране увеличивается, SVG начинает
ухудшаться, поскольку мы постоянно добавляем их в DOM.
Также обратитесь: http://msdn.microsoft.com/en-us/library/gg193983(v=vs.85).aspx
источник
SVG
В зависимости от варианта использования SVG используется для логотипов, диаграмм, потому что его векторную графику вы рисуете и о ней забыли. Когда порт просмотра изменяется, например, при изменении размера (или масштабировании), он сам настраивается и не требует перерисовки.
Холст
Холст - это растровое изображение (или растровое изображение), которое создается путем рисования пикселей на экране. Он используется для разработки игр или графического интерфейса ( https://www.chromeexperiments.com/webgl ) в заданной области, он рисует пиксель и изменяет его, перерисовывая другой. Поскольку это растровый тип, нам нужно полностью перерисовывать при изменении порта просмотра.
Справка
http://www.sitepoint.com/7-reasons-to-consider-svgs-instead-of-canvas
http://en.wikipedia.org/wiki/WebGL
http://vector-conversions.com/vectorizing/raster_vs_vector.html
источник
SVG
- это спецификация чертежа, подобная формату файла. SVG - это документ. Вы можете обмениваться файлами SVG, например файлами HTML. Кроме того, поскольку элементы SVG и элементы HTML используют один и тот же DOM API, можно использовать JavaScript для создания SVG DOM таким же образом, как это возможно для создания HTML DOM. Но для создания файла SVG не требуется JavaScript. Для написания SVG достаточно простого текстового редактора. Но вам понадобится как минимум калькулятор, чтобы рассчитать координаты фигур на чертеже.CANVAS
это просто область рисования. Для создания содержимого холста необходимо использовать JavaScript. Холст обменять нельзя. Это не документ. И элементы холста не являются частью дерева DOM. Вы не можете использовать DOM API для управления содержимым холста. Вместо этого вам нужно использовать специальный API холста для рисования фигур на холсте.Преимущество
SVG
том, что вы можете обменять рисунок как документ. Преимущество этогоCANVAS
заключается в том, что он имеет менее подробный API JavaScript для создания содержимого.Вот пример, который показывает, что вы можете добиться аналогичных результатов, но способ сделать это в JavaScript сильно отличается.
// Italic S in SVG (function () { const ns='http://www.w3.org/2000/svg'; let s = document.querySelector('svg'); let p = document.createElementNS (ns, 'path'); p.setAttribute ('id', 'arc'); p.setAttribute ('d', 'M 0.9 -0.9 a 0.8,0.4 -10 0,0 -0.9,0.9'); s.appendChild (p); let u = document.createElementNS (ns, 'use'); u.setAttribute ('href', '#arc'); u.setAttribute ('transform', 'rotate(180)'); s.appendChild (u); })(); // Italic S in CANVAS (function () { let c = document.querySelector('canvas'); let w = c.width = c.clientWidth; let h = c.height = c.clientHeight; let x = c.getContext('2d'); x.lineWidth = 0.05 * w; x.moveTo (w/2, h/2); x.bezierCurveTo (w*0.02, h*0.4, w*0.4, -h*0.02, w*0.95, h*0.05); x.moveTo (w/2, h/2); x.bezierCurveTo (w*(1-0.02), h*(1-0.4), w*(1-0.4), h*(1+0.02), w*(1-0.95), h*(1-0.05)); x.stroke(); })();
svg, canvas { width: 3em; height: 3em; } svg { vertical-align: text-top; stroke: black; stroke-width: 0.1; fill: none; } canvas { vertical-align: text-bottom; } div { float: left; }
<div><svg viewBox="-1 -1 2 2"></svg>VG</div> <div>CANVA<canvas></canvas></div>
Как видите, результат почти такой же, но код JavaScript совершенно другой.
SVG создается с помощью DOM API с использованием
createElement
,setAttribute
иappendChild
. Вся графика находится в строках атрибутов. SVG имеет более мощные примитивы. CANVAS, например, не имеет ничего эквивалентного пути дуги SVG. Пример CANVAS пытается имитировать дугу SVG с кривой Безье. В SVG вы можете повторно использовать элементы, чтобы преобразовать их. В CANVAS нельзя повторно использовать элементы. Вместо этого вам нужно написать функцию JavaScript, чтобы вызывать ее дважды. SVG имеет параметр,viewBox
который позволяет использовать нормализованные координаты, что упрощает вращение. В CANVAS вы должны сами рассчитать координаты на основеclientWidth
иclientHeight
. И вы можете стилизовать все элементы SVG с помощью CSS. В CANVAS вы ничего не можете стилизовать с помощью CSS. Поскольку SVG - это модель DOM, вы можете назначить обработчики событий всем элементам SVG. Элементы CANVAS не имеют DOM и обработчиков событий DOM.Но с другой стороны, код CANVAS гораздо легче читать. Вам не нужно заботиться о пространствах имен XML. И вы можете напрямую вызывать графические функции, потому что вам не нужно строить DOM.
Урок ясен: если вы хотите быстро нарисовать графику, используйте CANVAS. Если вам нужно поделиться графикой, например, стилизовать ее с помощью CSS или использовать обработчики событий DOM в своей графике, создайте SVG.
источник
добавив к вышеуказанным пунктам:
SVG легче передавать через Интернет по сравнению с JPEG, GIF и т. Д., А также чрезвычайно масштабируется при изменении размера без потери качества.
источник
SVG
Он основан на объектной модели.
Подходит для использования больших областей рендеринга.
SVG предоставляет любую поддержку для обработчиков событий.
Модификация разрешена через скрипт и CSS.
SVG имеет лучшую масштабируемость.
SVG основан на векторах (состоит из фигур).
SVG не подходит для игровой графики. SVG не зависит от разрешения.
SVG поддерживает анимацию API.
SVG подходит для печати с высоким качеством и любым разрешением.
Элементы холста
Он основан на пикселях.
Подходит для использования мелкого рендеринга
Canvas не предоставляет обработчиков событий.
Модификация разрешена только через скрипт.
Canvas имеет плохую масштабируемость.
Холст основан на растре (состоит из пикселя).
Холст подходит для игровой графики.
Холст полностью зависит от разрешения.
У Canvas нет API для анимации.
Холст не подходит для печати высокого качества и высокого разрешения.
источник