HTML si no se encuentra la imagen


97

Tengo una imagen en una página HTML:

<img src="smiley.gif" alt="Smiley face" width="32" height="32" />

Si la imagen no se encuentra en el servidor, muestra un feo cuadrado en blanco.

Quiero que, si no se encuentra una imagen, no se muestre nada o alguna otra imagen predeterminada que sé que definitivamente está en el servidor.

¿Cómo se puede hacer esto?


2
Recibo favicons, algunos sitios no los tienen.
David19801

En ese caso, ¿tal vez haga primero una solicitud del lado del servidor o del lado del cliente para ver qué código de estado regresa?
Pekka

Estoy tratando de no usar js porque no me gustan los sitios web lentos y hay demasiados favicons para hacerlo en el lado del servidor, se prohibiría el servidor.
David19801

9
¿Quién es el idiota que te dijo que javascript hará que el sitio web sea lento?
Qchmqs

@Pekka 웃 Por supuesto, debería tener enlaces que funcionen en el sitio. ¿Qué pasa si los enlaces no están en su propio sitio, sino en el de otra persona? ¿O qué pasa si vienen de un almacén de datos remoto y tardan un poco en descargarse?
leetheguy

Respuestas:


265

La mejor forma de solucionar tu problema:

<img id="currentPhoto" src="SomeImage.jpg" onerror="this.onerror=null; this.src='Default.jpg'" alt="" width="100" height="120">

onerror es algo bueno para ti :)

Simplemente cambie el nombre del archivo de imagen y pruébelo usted mismo.


4
¡Combinado con una etiqueta alt útil, esta es una excelente manera de resolver el problema!
mlibby

2
¡Asombroso! solución perfecta
Emanuele Pavanello

5
Si Default.jpg no está disponible, terminará en un bucle sin fin. Debe agregar un chequeif (this.src != 'Default.jpg')
dehlen

7
Para evitar bucles infinitos y mejor que el if: this.onerror=null;como se indica a continuación por @Sudarshan.
Guillaume F.

cualquiera que trabaje con react, puede consultar aquí stackoverflow.com/questions/34097560/…
Earlee

17

Bueno, puedes probar esto.

  <object data="URL_TO_Default_img.png" type="image/png">
   <img src="your_original_image.png" />
  </object>

esto funcionó para mí. Déjame saber de ti.


4
Parece que funciona en todos los navegadores principales. Simplemente cambie el original y el predeterminado. Para que el objeto muestre la imagen original y el img predeterminado uno
Evgeny

10

Ok, pero me gusta usar de esta manera, para que siempre que la imagen original no esté disponible, puedas cargar tu imagen predeterminada que puede ser tu emoticón favorito o una imagen que diga ¡Lo siento! No disponible, pero en caso de que falten ambas imágenes, puede usar texto para mostrar. donde también puedes tu smiley entonces. Eche un vistazo a casi todos los casos.

<img src="path_to_original_img/img.png"  alt="Sorry! Image not available at this time" 
       onError="this.onerror=null;this.src='<?=base_url()?>assets1/img/default.jpg';">

1
No use alt para los textos de error si desea que los motores de búsqueda analicen la página correctamente. Los motores de búsqueda podrían indexar los datos de su contenido incorrectamente.
varela

¿Qué <?=base_url()?>hacer? ¿Por qué sorprendentemente agrega código del lado del servidor y del marco?
Nico Haase

@NicoHaase su url desde php framework, bueno, siempre puedes escribir tu propia url para la imagen, he dado un ejemplo que no significa que debas copiarlo y pegarlo o concentrarte en esa url, incluye tu url, eso significa. Para explicar tienes que dar un ejemplo, así que lo hice.
Sudarshan Kalebere

3

Aquí Verifique el fragmento de código a continuación que, en esto, escribí mal el nombre de la imagen. Entonces, solo por eso, muestra la imagen alternativa como imagen no encontrada (404.svg).

<img id="currentPhoto" src="https://www.ccrharrow.org/Images/content/953/741209.pg" onerror="this.src='https://www.unesale.com/ProductImages/Large/notfound.png'" alt="">


1

La forma habitual de manejar este escenario es estableciendo la altetiqueta en algo significativo.

Si desea una imagen predeterminada en su lugar, le sugiero que utilice una tecnología del lado del servidor para servir sus imágenes, llamado usar un formato similar a:

<img src="ImageHandler.aspx?Img=Blue.jpg" alt="I am a picture" />

En el ImageHandler.aspxcódigo, detecta cualquier error de archivo no encontrado y publica tu default.jpg.


1

Puede mostrar un texto alternativo agregando alt:

<img src="my_img.png" alt="alternative text" border="0" /> 

tal vez este cuadrado proviene del div (u otra etiqueta) que contiene su img
juankysmith

alt no parece funcionar si el estilo de visualización de img es 'bloque'
user3342930

1

Agregué un div principal alrededor de la imagen y usé el siguiente controlador de eventos de error para ocultar la imagen original porque en IE todavía se mostraba una imagen fea no encontrada después de usar el atributo alt:

<div style=" width:300px; height:150px; float:left; margin-left:5px; margin-top:50px;">
        <img src='@Url.Content("~/Images/Logo-Left.png")' onerror="this.parentElement.innerHTML = '';" />
</div>

1

Como alternativa, si la imagen no existe, no muestre nada. (lo que estaba buscando)

Puede cambiar la función de la respuesta de Robby Shaw en el atributo "onerror" a "this.remove ()".

<img id="currentPhoto" src="SomeImage.jpg" alt='1' width="100" height="120">
<img id="currentPhoto" src="SomeImage.jpg" onerror="this.onerror=null; this.remove();" alt="2" width="100" height="120">


0

Intente usar border=0en la imgetiqueta para hacer desaparecer el cuadrado feo.

<img src="someimage.png" border="0" alt="some alternate text" />


0

Quería ocultar el espacio ocupado por la <img>etiqueta, así que esto funcionó para mí.

<img src = "source.jpg" alt = "" >


0

Si desea una imagen alternativa en lugar de un texto, también puede usar php:

$file="smiley.gif";
$alt_file="alt.gif";
if(file_exist($file)){
     echo "<img src='".$file."' border="0" />";
}else if($alt_file){
     // the alternative file too might not exist not exist
     echo "<img src='".$alt_file."' border="0" />";
}else{
  echo "smily face";
}

0

Una forma sencilla de manejar esto, simplemente agregue una imagen de fondo.


0

prueba PHP

if (file_exists('url/img/' . $Image)) {
    $show_img_URL = "Image.jpg";
} else {
    $show_img_URL = "Image_not_found.jpg";
}

-1

Me funciona que si no desea usar el atributo alt si la imagen se rompe, puede usar este código y configurarlo en consecuencia.

<h1>
  <a> 
   <object data="~/img/Logo.jpg" type="image/png">
     Your Custom Text Here
   </object>
  </a>
</h1>

-2

Este funcionó para mí. usando el srcset. Me acabo de enterar, así que no sé si los navegadores lo admiten, pero me ha funcionado. Pruébalo y luego devuélveme tu feed.

 <img src="smiley.gif" srcset="alternatve.gif" width="32" height="32" />

-21

Solución: eliminé los elementos de alto y ancho del img y luego funcionó el texto alternativo.

<img src="smiley.gif" alt="Smiley face" width="32" height="32" />

A

<img src="smiley.gif" alt="Smiley face" />

Gracias a todos.


17
Así que te diste la "respuesta correcta" pero respondiste con una respuesta no relacionada con la pregunta, GG WP.
Jean-Paul

oh, este chico aceptó su propia respuesta de todas estas respuestas correctas jajaja, una buena manera de apreciarnos a nosotros mismos.
Sudarshan Kalebere


Esta respuesta no proporcionó una imagen alternativa.
Patrick Knott

@ david19801 ¿te importaría explicar?
P Satish Patro
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.