Html2canvas: SVG<img/> est énorme

Créé le 11 avr. 2019  ·  9Commentaires  ·  Source: niklasvh/html2canvas

Veuillez vous assurer que vous testez avec la dernière version de html2canvas .
Les anciennes versions ne sont pas prises en charge et les problèmes signalés pour celles-ci seront résolus.

Veuillez d'abord suivre les étapes générales de dépannage :

  • [x] Vous utilisez la dernière version
  • [x] Vous testez en utilisant la version non-minifiée de html2canvas et avez vérifié tous les problèmes potentiels signalés dans la console

Rapports de bogues :

Si j'utilise <img src="... .svg"> le svg est super gonflé. Cela ne semble se produire qu'avec les images svg "responsives" (images pour lesquelles aucune hauteur ou largeur n'a été définie dans le codage d'image réel). L'image et la contentBox sont rendues avec la taille correcte, mais lorsqu'elles sont dessinées sur le canevas, l'image adopte la hauteur de la fenêtre.

Voici le violon : http://jsfiddle.net/1b4mLnfj/2/

screencapture-html2canvas-hertzen-2019-04-10-22_39_56
screencapture-html2canvas-hertzen-2019-04-10-22_40_16

Caractéristiques:

  • version html2canvas testée avec : 1.0.0-rc.1 / 1.0.0-rc.0
  • Navigateur & version : Chrome 73 / Opera 58
  • Système d'exploitation : OS X
Bug Unverified

Commentaire le plus utile

Merci je vais regarder ça

Tous les 9 commentaires

J'ai joint un violon, ce qui, j'espère, est clair : http://jsfiddle.net/1b4mLnfj/2/

Merci je vais regarder ça

Cela fait un moment que je fouille dans ce domaine et il semble que les limites du conteneur soient calculées correctement, mais l'image vectorielle elle-même adopte les dimensions de la fenêtre d'affichage. Il semble que les limites et les limites courbes soient correctes, donc je ne sais pas où apporter des modifications... Quelqu'un a-t-il déjà rencontré un problème comme celui-ci?

Après une enquête plus approfondie, il semble que cela ne se produise qu'avec les images svg "responsives" - si vous ouvrez le svg dans Illustrator et enregistrez sans l'option responsive cochée, la taille sera correcte... essentiellement si le svg ne le fait pas. avoir une hauteur et une largeur encodées (ce qu'Illustrator a appelé "responsive") puis il adoptera les dimensions de la fenêtre.

Une solution potentielle consiste donc à remplacer le <img> par un vrai <svg> utilisant une bibliothèque comme svg-inject (https://github.com/iconfu/svg-inject) -- ici, si vous appliquez une hauteur et une largeur au <img> , il sera adopté par le <svg> lors de l'injection et cela empêchera le redimensionnement sur le canevas.

Il y a quelques inconvénients à cela (comme lors de l'utilisation de src encodés, base64, ou si vous avez plusieurs svg avec la même structure et le même style de classe en ligne), mais cela aidera peut-être quelqu'un d'autre aux prises avec le problème. J'y travaille régulièrement depuis quelques jours et c'est la meilleure solution que j'ai jusqu'à présent. Je ne trouve rien dans le code html2canvas réel qui empêchera le redimensionnement d'une image svg sur le canevas si le svg n'a pas de valeurs de hauteur / largeur codées.

Je jette donc l'éponge sur celui-ci mais j'ai atterri sur la solution étant liée à la façon dont le svg est rendu/dessiné sur la toile. Plus précisément, dans renderNodeContent si nous pouvons déterminer comment déterminer si une image est un svg et aussi une qui manque la hauteur / largeur codée (responsive), alors nous pourrions dessiner ce svg avec des dimensions qui correspondent à la fenêtre ( width = viewport.width, height = (image.height * viewport.width) / image.width)) alors théoriquement cela pourrait fonctionner. Je ne sais tout simplement pas comment déterminer si l'image svg manque ces valeurs de hauteur et de largeur.

une mise à jour ici?

Pas de ma part, j'ai arrêté de travailler sur le problème mais j'espère que les commentaires ci-dessus pourraient être utiles.

Salut j'ai eu le même problème.
Ma balise d'image contenait un style style='transition: transform 0.6s;' . Sans cela, l'image s'est correctement rendue.

Cette page vous a été utile?
0 / 5 - 0 notes