Этот ответ скопирован из моего ответа на другой вопрос. Но затем ОП изменил вопрос, и поэтому этот ответ стал для него менее актуальным. ИМХО, это более актуально для этого вопроса, так что вот:
Думайте о разнице между canvas и svg как о разнице между Photoshop и Illustrator (или Gimp и Inkscape для вас, ребята из OSS). Один работает с растровыми изображениями, а другой — с векторной графикой.
С холстом, поскольку вы рисуете в растровом изображении, вы можете легко размазывать, размывать, сжигать, уклоняться от изображений. Но поскольку это растровое изображение, вы не можете легко нарисовать линию, а затем решить изменить ее положение. Вам нужно удалить старую линию, а затем нарисовать новую линию.
С svg, поскольку вы рисуете векторы, вы можете легко перемещать, масштабировать, вращать, перемещать, переворачивать свои рисунки. Но поскольку это векторы, вы не можете легко размыть края в соответствии с толщиной линии или плавно соединить красный круг с синим квадратом. Вам нужно имитировать размытие, рисуя промежуточные полигоны между объектами.
Иногда варианты их использования пересекаются. Например, многие люди используют холст для рисования простых линий и отслеживания объектов как структур данных в javascript. Но на самом деле они оба служат разным целям. Если вы попытаетесь реализовать векторный рисунок общего назначения в чистом javascript поверх холста, я сомневаюсь, что вы будете быстрее, чем использовать svg, который, скорее всего, реализован в C.
person
slebetman
schedule
23.08.2010