Html2canvas: SVG<img/> es masivo

Creado en 11 abr. 2019  ·  9Comentarios  ·  Fuente: niklasvh/html2canvas

Asegúrese de realizar la prueba con la última versión de html2canvas .
Las versiones antiguas no son compatibles y los problemas informados para ellas se cerrarán.

Primero siga los pasos generales de solución de problemas:

  • [x] Estás usando la última versión
  • [x] Está probando con la versión no minificada de html2canvas y verificó cualquier problema potencial informado en la consola.

Informes de errores:

Si uso <img src="... .svg"> el svg está superdimensionado. Esto parece ocurrir solo con imágenes svg "receptivas" (imágenes en las que no se ha establecido altura ni ancho en la codificación de imagen real). La imagen y el cuadro de contenido se representan con el tamaño correcto, pero cuando se dibujan en el lienzo, la imagen adopta la altura de la ventana gráfica.

Aquí está el violín: http://jsfiddle.net/1b4mLnfj/2/

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

Especificaciones:

  • html2canvas versión probada con: 1.0.0-rc.1 / 1.0.0-rc.0
  • Navegador y versión: Chrome 73 / Opera 58
  • Sistema operativo: OS X
Bug Unverified

Comentario más útil

Gracias, lo investigaré

Todos 9 comentarios

Adjunté un violín, que espero que deje esto en claro: http://jsfiddle.net/1b4mLnfj/2/

Gracias, lo investigaré

He estado hurgando en esto durante un tiempo y parece que los límites del contenedor se están calculando correctamente, pero la imagen vectorial en sí está adoptando las dimensiones de la ventana gráfica. Parece que los límites y curvas de los límites están bien, así que no estoy seguro de dónde hacer cambios ... ¿Alguien se ha encontrado con un problema como este antes?

Después de más investigación, parece que esto solo está sucediendo con imágenes svg que son "receptivas": si abre el svg en Illustrator y lo guarda sin la opción receptiva marcada, tendrá el tamaño correcto ... esencialmente si el svg no tiene una altura y un ancho codificados en él (lo que Illustrator llamó "receptivo"), entonces adoptará las dimensiones de la ventana gráfica.

Entonces, una posible solución es reemplazar <img> con un verdadero <svg> usando una biblioteca como svg-inject (https://github.com/iconfu/svg-inject) - aquí, si aplica una altura y un ancho al <img> , será adoptado por el <svg> cuando se inyecte y eso evitará el cambio de tamaño en el lienzo.

Hay algunos inconvenientes en esto (como cuando se usa codificado, base64 src, o si tiene varios svg con la misma estructura y estilo de clase en línea) pero tal vez esto ayude a alguien más a luchar con el problema. He estado trabajando en esto de manera constante durante unos días y esta es la mejor solución que tengo hasta ahora. No puedo encontrar nada en el código html2canvas real que evitará el cambio de tamaño de una imagen svg en el lienzo si el svg no tiene valores codificados de altura / ancho.

Así que estoy tirando la toalla en este caso, pero llegué a la solución relacionada con cómo se representa / dibuja el svg en el lienzo. Específicamente, en renderNodeContent si podemos averiguar cómo determinar si una imagen es un svg y también una que no tiene el alto / ancho codificado (sensible), entonces podríamos dibujar ese svg con dimensiones que coincidan con la ventana gráfica ( width = viewport.width, height = (image.height * viewport.width) / image.width)) entonces, en teoría, esto podría funcionar. Simplemente no estoy seguro de cómo determinar si a la imagen svg le faltan esos valores de altura y ancho.

alguna actualización aquí?

No de mi parte, dejé de trabajar en el problema, pero espero que los comentarios anteriores puedan ser útiles.

Hola, tuve el mismo problema.
Mi etiqueta de imagen contenía un estilo style='transition: transform 0.6s;' . Sin esto, la imagen se renderiza correctamente.

¿Fue útil esta página
0 / 5 - 0 calificaciones