Czy istnieje domyślny sposób rysowania pliku SVG na kanwie HTML5? Google Chrome obsługuje ładowanie SVG jako obrazu (i po prostu używanie drawImage
), ale konsola programisty ostrzega o tym resource interpreted as image but transferred with MIME type image/svg+xml
.
Wiem, że istnieje możliwość przekonwertowania SVG do poleceń kanwy (jak w tym pytaniu ), ale mam nadzieję, że nie jest to potrzebne. Nie obchodzą mnie starsze przeglądarki (więc jeśli FireFox 4 i IE 9 będą coś obsługiwać, to wystarczy).
Odpowiedzi:
EDYCJA 16 grudnia 2019 r
Path2D jest obsługiwana przez wszystkich głównych przeglądarek teraz
EDYCJA 5 listopada 2014
Możesz teraz używać
ctx.drawImage
do rysowania HTMLImageElements, które mają źródło .svg w niektórych, ale nie we wszystkich przeglądarkach . Chrome, IE11 i Safari działają, Firefox działa z niektórymi błędami (ale co noc je naprawił).Przykład na żywo tutaj . Na płótnie powinien być widoczny zielony kwadrat. Drugi zielony kwadrat na stronie to ten sam
<svg>
element wstawiony do DOM w celach informacyjnych.Możesz także użyć nowych obiektów Path2D do rysowania ścieżek SVG (ciągów znaków). Innymi słowy, możesz napisać:
Żywy przykład tego tutaj.
Odpowiedź starej potomności:
Nie ma nic natywnego, co pozwala na natywne używanie ścieżek SVG w kanwie. Musisz się przekonwertować lub skorzystać z biblioteki, aby zrobić to za Ciebie.
Proponuję zajrzeć do canvg:
http://code.google.com/p/canvg/
http://canvg.googlecode.com/svn/trunk/examples/index.htm
źródło
drawImage
. Ale nadal otrzymuję to ostrzeżenie. Skąd to pochodzi?Przepraszamy, nie mam wystarczającej reputacji, aby komentować odpowiedź @Matyas, ale jeśli obraz svg jest również w base64, zostanie narysowany na wyjściu.
Próbny:
źródło
img
tagi w programiesvg
, a potem po prostu narysować osobno obrazy na płótnie.Możesz łatwo narysować proste
svg
obrazy na płótnie:Uwaga: jedyną wadą tej metody jest to, że nie może ona rysować obrazów osadzonych w
svg
. (zobacz demo)Demonstracja:
(Zwróć uwagę, że osadzony obraz jest widoczny tylko w
svg
)źródło
Mozilla oferuje prosty sposób rysowania SVG na płótnie o nazwie „ Rysowanie obiektów DOM na płótnie ”
źródło
Jak mówi Simon powyżej, użycie drawImage nie powinno działać. Ale używając biblioteki canvg i:
Wynika to z linku, który Simon podał powyżej, który zawiera szereg innych sugestii i wskazuje, że chcesz utworzyć łącze lub pobrać pliki canvg.js i rgbcolor.js. Umożliwiają one manipulowanie i ładowanie pliku SVG za pomocą adresu URL lub za pomocą wbudowanego kodu SVG między tagami svg w ramach funkcji JavaScript.
źródło