Chrome no representa SVG referenciado a través de la etiqueta <img>


95

Tengo problemas con google chrome que no representa svg con una etiqueta img. Esto sucede cuando se actualiza la página y se carga la página inicial. Puedo hacer que la imagen se muestre "Inspeccionando elemento", luego haciendo clic derecho en el archivo svg y abriendo el archivo svg en una nueva pestaña. La imagen svg luego se renderizará en la página original.

<img src="../images/Aged-Brass.svg">

Totalmente perdido aquí en cuanto a cuál es el problema. La imagen svg se reproduce bien en IE9 y FF, pero no en Chrome o Safari.

También tengo configurados mis tipos MIME. (imagen / svg + xml)

EDITAR: Aquí hay una página html simple que construí para ayudar a ilustrar mi problema.

<!DOCTYPE html>
<html>
<head>
    <title>SVG Test</title>

    <style>
        #BackgroundImage{
            background: url('../images/Aged-Brass.svg') no-repeat scroll left top;
            width: 400px;
            height: 600px;
        }

        #ImageTag{
            width: 400px;
            height: 600px;
            margin: 0px;
            padding: 0px;
        }
    </style>
</head>
<body>
    <div id="ImageTag">
        <img src="../images/Aged-Brass.svg">
    </div>
    <div id="BackgroundImage"></div>
</body>
</html>

Como puede ver, estoy tratando de usar un archivo svg tanto en una etiqueta img como en css como imagen de fondo. Tampoco funciona en la carga de la página inicial en Chrome o Safari. Cuando inspecciono el elemento, hago clic derecho en svg o hago clic en el enlace para cargar svg en otra ventana, el archivo svg se mostrará en la pestaña original.


1
¿Puedes poner un ejemplo o publicar algún código de ejemplo aquí?
Sirko

Realmente necesitamos poder ver y reproducir esto nosotros mismos si desea ayuda.
Phrogz

Por casualidad, ¿su "Aged-Brass.svg" contiene una imagen incrustada? Tuve el mismo problema, y ​​eso es lo que lo
rastreé

Respuestas:


125

Una forma sencilla y sencilla; de acuerdo con https://css-tricks.com/forums/topic/svg-css-background-image-not-showing-in-chrome/ Tienes que abrir el archivo .SVG con un editor de texto (como el bloc de notas) y cambiar

xlink:href="data:img/png;base64,

a:

xlink:href="data:image/png;base64,

funcionó para mí!


9
Esta es una solución funcional. Me encontré con este problema al exportar un objeto vectorial inteligente como SVG usando Photoshop.
Mikhail

10
Esto fue un salvavidas, pasó horas tratando de averiguar cuál era el problema. ¡¡Gracias!!
mhodges

2
Del mismo modo, esto resolvió mi problema, también pasé mucho tiempo tratando de averiguar por qué la imagen no aparecía.
MrEvers

3
No tenía esta línea de código en el archivo SVG y agregarla en la etiqueta <svg> no me ayudó.
Pete

2
Esto debería estar muy arriba. Salvaste mi día.
Mattia Rasulo

42

La etiqueta svg necesita el atributo de espacio de nombres xmlns:

<svg xmlns="http://www.w3.org/2000/svg"></svg>

Esta. Y tuve que cargarlo como imagen de fondo de un div.
casey

1
El svg todavía necesita el espacio de nombres. Solo asegúrese de que esté definido en el archivo SVG que usa como fondo.
bang

30

Vine aquí porque tuve el mismo problema, cuando inspecciono el elemento puedo ver el archivo, pero en el sitio no puedo (incluso cuando uso localhost)

la respuesta a mi problema fue guardar el archivo SVG. Si lo guardó de Illustrator, asegúrese de hacer clic en "incrustar" y no en "vincular". como enlace solo se referirá a sus archivos locales en lugar de incluir los datos (si lo entiendo correctamente). ingrese la descripción de la imagen aquí

Lo leí en el sitio web de adobe, que tiene otros consejos útiles para exportar http://www.adobe.com/inspire/2013/09/exporting-svg-illustrator.html

Esto funcionó para mí, espero que sea útil.


1
¿Alguien sabe si hay una manera de hacer esto con un objeto inteligente en Photoshop? Abrir Illustrator y reexportar con esta opción en Illustrator fue lo único que me permitió mostrar svgs en Chrome, después de varios intentos de otras correcciones.
Alex Podworny

2
¿Qué efecto tiene esa opción en el código SVG real?
Jānis Elmeris

19

Vine aquí porque tuve un problema similar, la imagen no se estaba renderizando. Lo que descubrí fue que el encabezado del tipo de contenido de mi servidor de prueba no era correcto. Lo arreglé agregando lo siguiente a mi archivo .htaccess:

AddType image/svg+xml svg svgz
AddEncoding gzip svgz

1
Gracias. La configuración de Content-Type en image / svg + xml lo solucionó.
samir105

Tenga en cuenta que image/svgofrece el archivo para descargar, tiene que tener +xml.
Jakub Vrána

10

Use en su <object>lugar (por supuesto, reemplace cada URL con la suya propia):

.BackgroundImage {
        background: url('https://upload.wikimedia.org/wikipedia/commons/b/bd/Test.svg') no-repeat scroll left top;
        width: 400px;
        height: 600px;
}
<!DOCTYPE html>
<html>
<head>
    <title>SVG Test</title>
</head>
<body>
    <div id="ObjectTag">
        <object type="image/svg+xml" data="https://upload.wikimedia.org/wikipedia/commons/b/bd/Test.svg" width="400" height="600">
          Your browser does not support SVG.
        </object>
    </div>
    <div class="BackgroundImage"></div>
</body>
</html>


6

Agregar el atributo de ancho a la etiqueta [svg] (editando el código fuente XML de svg) funcionó para mí: por ejemplo:

<!-- This didn't render -->
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
...  
</svg>

<!-- This did -->
<svg version="1.1" baseProfile="full" width="1000" xmlns="http://www.w3.org/2000/svg">
...  
</svg>

3

Pude usar tu muestra para crear una página de prueba y funcionó bien. Mi suposición es que hay algo mal con su archivo svg. ¿Puedes pegar eso aquí también? Aquí está la muestra que utilicé.

 <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
   <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
   <g>
      <title>Layer 1</title>
      <ellipse ry="30" rx="30" id="svg_1" cy="50" cx="50" stroke-width="5" stroke="#000000" fill="#FF0000"/>
   </g>
 </svg>

3

parece un error de Chrome, hice otra cosa ya que casi me vuelvo loco por esto ... usando el depurador de Chrom si cambia el css del objeto svg que muestra en la pantalla.

así que lo que hice fue: 1. verificar el tamaño de la pantalla 2. escuchar el evento "load" de mi objeto SVG 3. cuando el elemento está cargado cambio su css usando jQuery 4. me hizo el truco

if (jQuery(window).width() < 769) {

  jQuery('object#mysvg-logo')[0].addEventListener('load', function() {
       jQuery("object#mysvg-logo").css('width','181px');
  }, true);

}
width: 180px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<object id="mysvg-logo" type="image/svg+xml" data="my svg logo url here">Your browser does not support SVG</object>


2

Tuve un problema similar y las respuestas existentes a esto no eran aplicables o funcionaban, pero no pudimos usarlas por otras razones. Así que tuve que averiguar qué no le gustaba a Chrome de nuestros SVG.

En nuestro caso, resultó ser que el idatributo de la symboletiqueta en el archivo SVG tenía un :, que a Chrome no le gustó. Tan pronto como quité el: , funcionó bien.

Malo:

<svg
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 72 72">
    <defs>
        <symbol id="ThisIDHasAColon:AndChromeDoesNotLikeIt">
        ...
        </symbol>
    </defs>
    <use
        ....
        xlink:href="#ThisIDHasAColon:AndChromeDoesNotLikeIt"
    />
</svg>

Bueno:

<svg
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 72 72">
    <defs>
        <symbol id="NoMoreColon">
        ...
        </symbol>
    </defs>
    <use
        ....
        xlink:href="#NoMoreColon"
    />
</svg>

2

.svgla imagen no tiene su altura y ancho iniciales. Por tanto, no es visible. Tienes que configurarlo.

Puede hacerlo en línea o en un archivo css:

En línea:

<img src="../images/Aged-Brass.svg" class="image" alt="logo" style="width: 100px; height: 50px;">

Archivo CSS:

<img src="../images/Aged-Brass.svg" class="image" alt="logo">
.image {
    width: 100px;
    height: 50px;
}

2

En mi caso, este problema persistió cuando creé y guardé el svg usando Photoshop. Lo que ayudó fue abrir el archivo con Illustrator y luego exportar el svg.


¿Qué cambió en el código SVG real? No estoy usando Photoshop ni Illustrator, necesito arreglar un archivo SVG existente.
Jānis Elmeris

En este caso, prueba la respuesta de @Sharif!
Mattia Rasulo

1

Inicialmente exporté mi svg de Photoshop CC y tuve que agregar manualmente

version="1.1"en la <svg>etiqueta

para que se muestre en Chrome.


1

El tipo de contenido en el encabezado HTTP del servidor fue el problema para mí. Tengo un servidor node.js, agregado:

if( pageName.substring(pageName.lastIndexOf('.')) == '.svg' ) {
  res.writeHead(200, { "Content-Type": "image/svg+xml" });
}

pageName es mi variable local para lo que se solicita.

¡Supongo que este es un problema común! Estoy usando la versión actual de Chrome (marzo de 2020).


0

Tuvo el mismo problema. Si el servidor está configurado correctamente y .htacces no es la respuesta, es posible que desee buscar la fuente svg que está incrustando. Los míos se crearon con un editor de texto, se renderizaron bien en Chrome y Safari dentro del código html5, una vez incrustados, no se veía nada. Se agregó la versión, las dimensiones, etc. correctas al código svg y funciona como un encanto. Además, todos los estilos en línea.

Es decir

<svg version="1.1" baseProfile="full" width="24" height="24" xmlns="http://www.w3.org/2000/svg"> 
  <rect x="0" y="0" rx="2" ry="2" width="24" height="24" style="fill:#fbc800;width:24px;height:24px;"  />  
</svg>

0

También tuve el mismo problema con Chrome, después de agregarlo DOCTYPE, funciona como se esperaba

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

antes de

    <?xml version="1.0" encoding="iso-8859-1"?>
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="792px" height="792px" viewBox="0 0 792 792" style="enable-background:new 0 0 792 792;" xml:space="preserve">
    <g fill="none" stroke="black" stroke-width="15">
  ......
  ......
  .......
  </g>
</svg>

Después

    <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="792px" height="792px" viewBox="0 0 792 792" style="enable-background:new 0 0 792 792;" xml:space="preserve">
    <g fill="none" stroke="black" stroke-width="15">
  ......
  ......
  .......
  </g>
</svg>

¿Cuál es la diferencia entre estos dos fragmentos de código? No lo estoy viendo.
rgilligan

@rgilligan my bad, se suponía que el primero sin doctype
Madan Bhandari

0

Tenga cuidado de no tener la propiedad CSS de transición para sus imágenes svg

Ahora no sé por qué, pero si haces: "transición: todo fácil 0.3s" para la imagen svg en Chrome, las imágenes no aparecen

p.ej:

* {
   transition: all ease 0.3s
  }

Chrome no renderiza svg.

Elimine cualquier propiedad CSS de transición y vuelva a intentarlo


0

En caso de problemas, intente abrir las imágenes primero con un programa que sea capaz de leer imágenes svg.
Si eso falla, entonces la imagen svg está dañada de alguna manera.

Tuve ese caso y copié las rutas svg en una nueva imagen svg y ajusté todos los detalles de las etiquetas svg.

Nunca probé la razón por la que no se estaba renderizando, pero supongo que algunos signos especiales invisibles causaron el error de renderizado. A veces, se editan archivos en Mac. Ya tenía este problema en otro contexto.


0

Tenía el mismo problema con una imagen SVG incluida a través de la etiqueta IMG. Resultó para mí que a Chrome no le gustaba que hubiera una línea en blanco directamente en la parte superior del archivo.

Eliminé la línea en blanco y mi SVG comenzó a renderizarse inmediatamente.


0

Me aseguro de agregar el estilo de la imagen . Funcionó para mi

style= "width:320; height:240"


0
Just replace <img> tag to <object> tag for SVG image.

<object data="assets/twitter-wrap.svg" type="image/svg+xml"></object>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.