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?

David19801
fuente
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.

Robby Shaw
fuente
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.

Sudarshan Kalebere
fuente
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';">
Sudarshan Kalebere
fuente
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="">

krishna amarghade
fuente
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.

Widor
fuente
1

Puede mostrar un texto alternativo agregando alt:

<img src="my_img.png" alt="alternative text" border="0" /> 
juankysmith
fuente
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>
Patrick Koorevaar
fuente
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">

Bim
fuente
0

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

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

Aziz Shaikh
fuente
0

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

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

Divyanshu Jimmy
fuente
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";
}
stephen komu
fuente
0

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

vikas dhere
fuente
0

prueba PHP

if (file_exists('url/img/' . $Image)) {
    $show_img_URL = "Image.jpg";
} else {
    $show_img_URL = "Image_not_found.jpg";
}
SIAMWEBSITE
fuente
-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>
Nasir Shafique
fuente
-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" />
stephen komu
fuente
-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.

David19801
fuente
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
No es la primera vez: D stackoverflow.com/a/12768098/1545917
Ghilas BELHADJ
Esta respuesta no proporcionó una imagen alternativa.
Patrick Knott
@ david19801 ¿te importaría explicar?
P Satish Patro