HTML se a imagem não for encontrada

97

Tenho uma imagem em uma página HTML:

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

Se a imagem não for encontrada no servidor, ela mostra um quadrado em branco feio.

Quero fazer com que, se uma imagem não for encontrada, ela não exiba nada ou alguma outra imagem padrão que sei que está definitivamente no servidor.

Como isso pode ser feito?

David19801
fonte
2
Estou recebendo favicons, alguns sites não os têm.
David19801
Nesse caso, talvez faça uma solicitação do lado do servidor ou do cliente primeiro para ver qual código de status retorna?
Pekka
Estou tentando não usar js porque não gosto de sites lentos e há muitos favicons para fazer isso do lado do servidor, o servidor seria banido.
David19801
9
quem é o idiota que disse que javascript deixará o site lento ??
Qchmqs
@Pekka 웃 Claro que você deve ter links funcionais no site. E se os links não estiverem no seu próprio site, mas no de outra pessoa? Ou se eles estiverem vindo de um armazenamento de dados remoto e demorando um pouco para fazer o download?
leetheguy

Respostas:

265

A melhor maneira de resolver seu problema:

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

onerror é uma coisa boa para você :)

Basta alterar o nome do arquivo de imagem e tentar você mesmo.

Robby Shaw
fonte
4
Combinado com uma alt tag útil, é uma ótima maneira de resolver o problema!
mlibby
2
Surpreendente! solução perfeita
Emanuele Pavanello
5
Se Default.jpg não estiver disponível, você terminará em um loop infinito. Você deve adicionar um chequeif (this.src != 'Default.jpg')
dehlen
7
Para evitar loops infinitos e melhores que o if: this.onerror=null;conforme fornecido abaixo por @Sudarshan.
Guillaume F.
qualquer pessoa que trabalhe com o
react
17

Bem, você pode tentar isso.

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

isso funcionou para mim. deixe-me saber sobre você.

Sudarshan Kalebere
fonte
4
Parece funcionar em todos os principais navegadores. Basta trocar o padrão e o original. Assim, esse objeto renderiza a imagem original e o padrão img
Evgeny
10

Ok, mas eu gosto de usar desta forma, para que sempre que a imagem original não estiver disponível, você possa carregar sua imagem padrão que pode ser seu smiley favorito ou imagem dizendo Desculpe! Não disponível, mas caso ambas as imagens estejam faltando, você pode usar texto para exibir. onde você também pode sorrir então. dê uma olhada em quase todos os 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
fonte
1
Não use alt para textos de erro se quiser que a página seja analisada corretamente pelos motores de busca. Os mecanismos de pesquisa podem indexar seus dados de conteúdo incorretamente.
varela
O que <?=base_url()?>fazer? Por que você, surpreendentemente, adiciona algum código do lado do servidor e baseado na estrutura?
Nico Haase
@NicoHaase seu url do framework php, bem, você sempre pode escrever seu próprio url para a imagem, dei um exemplo que não significa que você deve copiá-lo e colá-lo ou concentrar-se nesse url, você inclui seu url significa. Para explicar você tem que dar exemplo, eu fiz.
Sudarshan Kalebere
3

Aqui, verifique abaixo o trecho de código que, neste, digitei incorretamente o nome da imagem. Então, só por isso está mostrando a imagem alternativa como imagem não 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
fonte
1

A maneira usual de lidar com esse cenário é definir a alttag para algo significativo.

Se você quiser uma imagem padrão em vez disso, sugiro usar uma tecnologia do lado do servidor para servir suas imagens, chamada usando um formato semelhante a:

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

No ImageHandler.aspxcódigo, identifique quaisquer erros de arquivo não encontrado e forneça o seu default.jpg.

Widor
fonte
1

Você pode mostrar um texto alternativo adicionando alt:

<img src="my_img.png" alt="alternative text" border="0" /> 
Juankysmith
fonte
talvez este quadrado venha do div (ou outra tag) que contém seu img
juankysmith
alt parece não funcionar se o estilo de exibição img for 'bloquear'
user3342930
1

Eu adicionei um div pai ao redor da imagem e usei o seguinte manipulador de eventos onerror para ocultar a imagem original porque no IE ainda havia uma imagem feia de imagem não encontrada mostrada após usar o 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
fonte
1

Em alternativa, se a imagem não existir - não mostre absolutamente nada. (o que eu estava procurando)

Você pode trocar a função da resposta de Robby Shaw no atributo "onerror" para "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
fonte
0

Tente usar border=0na imgtag para fazer o quadrado feio desaparecer.

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

Aziz Shaikh
fonte
0

Eu queria esconder o espaço ocupado pela <img>etiqueta, então funcionou para mim

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

Divyanshu Jimmy
fonte
0

Se você quiser uma imagem alternativa em vez de um texto, você também pode 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
fonte
0

maneira simples de lidar com isso, basta adicionar uma imagem de fundo.

vikas dhere
fonte
0

tente PHP

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

funciona para mim que, se você não quiser usar o atributo alt se a imagem quebrar, então você pode usar este pedaço de código e definir de acordo.

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

Este funcionou para mim. usando o srcset. Eu acabei de aprender sobre isso, então não sei se os navegadores suportam, mas tem funcionado para mim. Experimente e depois me dê seu feedback.

 <img src="smiley.gif" srcset="alternatve.gif" width="32" height="32" />
stephen komu
fonte
-21

Solução - Removi os elementos de altura e largura do img e o texto alternativo funcionou.

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

PARA

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

Obrigado a todos.

David19801
fonte
17
Então, você se deu a "resposta correta", mas respondeu com uma resposta não relacionada à pergunta, GG WP.
Jean-Paul
oh, esse cara aceitou sua própria resposta de todas essas respostas corretas hahaha, uma boa maneira de se valorizar.
Sudarshan Kalebere
Não é a primeira vez: D stackoverflow.com/a/12768098/1545917
Ghilas BELHADJ
Esta resposta não forneceu uma imagem alternativa.
Patrick Knott
@ david19801 se preocupa em explicar?
P Satish Patro