Programación en castellano
Inicio > Taller Java > Lenguajes de script > Javascript > Refresco de imágenes para Webcam
-Artículos

Refresco de imágenes para Webcam

1 . Evitar la caché
2 . Recargar la imagen
3 . Evitando errores

Normalmente, cuando ponemos imágenes de nuestra webcam, empleamos un programa para subir una imagen cada minuto o medio minuto por FTP. Si no tenemos ninguno hay varias opciones gratuitas para realizar esta labor, como Dorgem, Fwink o Cam Commander. El problema es lograr que el navegador no almacene la primera imagen en la caché y que la recargue periódicamente sin emplear nada más que HTML y Javascript.

Evitar la caché

El truco para evitar la caché es de esas cosas que no se te ocurren y que, cuando te lo dicen, exclamas: ¡anda, pues claro! ¡Seré idiota! O al menos yo me lo dije a mi mismo cuando leí como hacerlo. El truco consiste en que, puesto que el navegador guarda en la caché la imagen con un nombre determinado, lo mejor es que cada vez que queramos recargarla la pongamos un nombre distinto. Como no es cosa de estar subiendo la imagen cada pocos segundos con un nombre distinto y actualizando a su vez el HTML, lo que haremos será emplear los parámetros que se admiten en cualquier URL. Así pues, la siguiente imagen:

<IMG SRC="webcam.jpg?d=1298632">

Será distinta para la caché del navegador que:

<IMG SRC="webcam.jpg?d=1097652">

Sin embargo, en ambas ocasiones estaremos cargando la imagen webcam.jpg.

Recargar la imagen

Lo siguiente que debemos hacer es recargar la imagen cada cierto tiempo. Para ello, lo primero que debemos hacer es ponerle a la imagen un nombre significativo:

<img name="webcam" src="webcam.jpg">

Luego, crearemos un objeto imagen que leerá la nueva toma de nuestra cámara web y, cuando haya terminado, la cambiará por la antigua. Si no lo hacemos así, en lugar de ver como una imagen sustituye a la otra de forma inmediata, veremos como queda el recuadro en blanco y finalmente se recarga la nueva, línea a línea.

periodo = 60;  // segundos entre recargas
imgsrc = document.webcam.src;
buffer = new Image();
buffer.onload = imageChange;
setTimeout("imageReload()", periodo * 1000);
  
function imageReload() {
  buffer.src = imgsrc + "?d=" + new Date().getTime();
  setTimeout("imageReload()", periodo * 1000);
}
  
function imageChange() {
  document.webcam.src = buffer.src;
}

El código hace lo siguiente: crea el objeto imagen al que se llama buffer y le asigna a su evento onload una función que copia la imagen cargada en el buffer a la imagen visible. Por otro lado, pone un temporizador que se ejecuta cada periodo segundos, y que llama a una función que comienza la carga de la nueva imagen en el buffer. Para que en cada ocasión que se ejecute cargue una imagen distinta empleamos el truquito que ya hemos visto, poniendo como parámetro el tiempo transcurrido desde el 1 de enero de 1970, lo que nos garantiza que cambie entre recargas.

Evitando errores

Este sistema está bien, pero tiene un pequeño problema. ¿Y si el usuario intenta recargar la imagen mientras la estamos subiendo. En tal caso dará error, no se ejecutará el evento onload porque no se cargará la imagen, y por tanto el temporizador se parará. Para evitarlo, emplearemos un controlador del evento onerror.

buffer.onerror = imageError;
function imageError() {
  setTimeout("imageReload()", 1000);
}

En el evento simplemente intentaríamos recargar de nuevo un segundo después, momento en el que suponemos que ya habrá terminado de subirse la nueva imagen por FTP. El código final y completo sería:

<html>
<head>
  <title>Mi webcam</title>
  <script language="JavaScript"><!--
  periodo = 60;
  imgsrc = document.webcam.src;
  buffer = new Image();
  buffer.onload = imageChange;
  buffer.onerror = imageError;
  setTimeout("imageReload()", periodo * 1000);
  
  function imageReload() {
    buffer.src = imgsrc + "?d=" + new Date().getTime();
	setTimeout("imageReload()", periodo * 1000);
  }
  
  function imageChange() {
    document.webcam.src = buffer.src;
  }

  function imageError() {
	setTimeout("imageReload()", 1000);
  }
  // --></script>
</head>
<body>
<img name="webcam" src="webcam.jpg" width="320" height="240" border="0">
</body>
</html>
 

Últimos comentarios
Últimos 5 comentarios

DUDA (18/11/2007)

Por
COMO PUEDO HACER QUE UNA IMAGEN APAREZCA DESPUES DE CIERTO TIEMPO EN UN DOCUMENTO HTML

no esta mal, pero es mas facil (09/02/2007)

Por
Hola.
lo mismo se puede conseguir sin necesidad de javascript.

Tan solo hace falta usar la etiqueta

con el atributo http-equiv=refresh y el content con los parametros para recargar la misma pagina en el tiempo deseado (en segundos)

Y si se quiere evitar que la pagina entre en la cache del navegador, se agrega otra etiqueta a la pagina, indicandolo con el atributo http-equiv=pragma y el contenido con valor no-cache

ejemplo:

suponiendo que la pagina se llama index.html, para recargarla cada 4 segundos y sin que se acumule en la cache:









webcam (07/09/2006)

Por
cómo puedo recibir imagenes de una webcam, ya que mi empresa tiene boqueado el msn para ello?

por que esto no tiene el error imagen (02/07/2006)

Por
hola este scrit funciona
¡¡Aun es más sencillo el refresco!! (04/03/2004)

pero noto un problema y es que al momento de recargar la imagen en algunos casos aparece rota, por que no le comocas la funcion imagen error de tal forma que al momento en que el gestor de ftp concuerde con la recarga de la pagina en vez de aparecer la imagen rota, aparesca la ultima imagen que subio el ftp

asfasdf (02/06/2005)

Por
asfasdfasdf
 
Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados