Câu trả lời này được sao chép từ câu trả lời của tôi cho một câu hỏi khác. Nhưng OP sau đó đã thay đổi câu hỏi và do đó câu trả lời này trở nên ít liên quan đến nó. IMHO nó là phù hợp hơn cho câu hỏi này vì vậy đây đi:
Hãy suy nghĩ về sự khác biệt giữa vải và svg bằng chênh lệch betwee Photoshop và Illustrator (hoặc Gimp và Inkscape cho những người bạn OSS). Một giao dịch với bitmap và nghệ thuật vector khác.
Với canvas, vì bạn đang vẽ theo bitmap, bạn có thể làm mờ, làm mờ, ghi, né tránh hình ảnh của mình dễ dàng. Nhưng vì nó là bitmap, bạn không thể vẽ một đường dễ dàng và sau đó quyết định định vị lại đường kẻ. Bạn cần phải xóa dòng cũ và sau đó vẽ một dòng mới.
Với svg, vì bạn đang vẽ vectơ, bạn có thể dễ dàng di chuyển, chia tỷ lệ, xoay, đặt lại vị trí, lật bản vẽ của mình. Nhưng vì đó là vectơ, bạn không thể dễ dàng làm mờ các cạnh theo độ dày của đường hoặc liên kết chặt chẽ một vòng tròn màu đỏ thành một hình vuông màu xanh. Bạn cần mô phỏng làm mờ bằng cách vẽ các đa giác trung gian giữa các đối tượng.
Đôi khi trường hợp sử dụng của chúng trùng lặp. Ví dụ: rất nhiều người sử dụng canvas để vẽ các đường thẳng đơn giản và theo dõi các đối tượng dưới dạng cấu trúc dữ liệu trong javascript. Nhưng thực sự, cả hai đều phục vụ các mục đích khác nhau. Nếu bạn cố gắng thực hiện vẽ vector mục đích chung trong javascript tinh khiết trên đầu trang của canvas tôi nghi ngờ bạn sẽ nhanh hơn bằng cách sử dụng svg mà rất có thể được thực hiện trong C.
RaphaelJS không chỉ * SVG và do đó sẽ hoạt động trong trình duyệt (tức là IE) không có Canvas (mặc dù có trình mô phỏng Canvas cho IE). – Ken