<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sentido Web &#187; rotar imágenes</title>
	<atom:link href="http://sentidoweb.com/tag/rotar-imagenes/feed" rel="self" type="application/rss+xml" />
	<link>http://sentidoweb.com</link>
	<description>Desarrollo web, HTML, CSS, Javascript, PHP, MySQL</description>
	<lastBuildDate>Mon, 16 Jan 2012 10:16:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Rotar imágenes aleatoriamente</title>
		<link>http://sentidoweb.com/2006/04/05/rotar-imagenes-aleatoriamente.php</link>
		<comments>http://sentidoweb.com/2006/04/05/rotar-imagenes-aleatoriamente.php#comments</comments>
		<pubDate>Thu, 06 Apr 2006 01:00:00 +0000</pubDate>
		<dc:creator>displaynone</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[imagen rotator]]></category>
		<category><![CDATA[imágenes aleatoriamente]]></category>
		<category><![CDATA[php rotar imágenes]]></category>
		<category><![CDATA[rotar imágenes]]></category>
		<category><![CDATA[script rotar imágenes]]></category>

		<guid isPermaLink="false">http://sentidoweb.com/2006/04/05/rotar-imagenes-aleatoriamente.php</guid>
		<description><![CDATA[Vamos con otra situación típica que nos solemos encontrar en el momento de desarrollar una web: rotar imágenes al azar cada vez que ingresamos o actualizamos una URL, y de la que José Román escribía hace unos días. Lo probaremos mediante 3 casos en Javascript y mediante un script en el servidor (PHP, JSP, ASP, [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos con otra situación típica que nos solemos encontrar en el momento de desarrollar una web: rotar imágenes al azar cada vez que ingresamos o actualizamos una URL, y de la que José Román <a href="http://www.emezeta.com/articulos/imagen-al-azar-para-nuestra-web">escribía</a> hace unos días.</p>
<p>Lo probaremos mediante 3 casos en Javascript y mediante un script en el servidor (PHP, JSP, ASP, &#8230;). A parte, se pueden hacer distintos usos de ellas, según sea nuestra forma de programar o la imaginación o necesidades que tengamos.</p>

<span id="more-106"></span>
<h3>Javascript</h3>
<p>Vamos a explicar tres situaciones: crear la imagen directamente, modificar el estilo de un elemento HTML y seleccionar una imagen de una lista. En todos los casos hay que seleccionar un número aleatoriamente entre 0 y el número de imágenes que tengamos, usando para ello <em>Math.random()</em>.</p>
<p>En el primero de los casos, en vez de escribir la etiqueta <em>img</em> directamente usaremos un script para crearla, teniendo el cuenta que conocemos de antemano el nombre de las imágenes y siguen una serie numérica (en este caso <em>1.png</em>, <em>2.png</em>, <em>3.png</em>, &#8230;):</p>
<pre>&lt;script type="text/javascript"&gt;
document.write('&lt;img src="'+parseInt(Math.random()*<em>numero-imagenes</em>+1)+'.png" alt="Cabecera IMG" /&gt;');
&lt;/script&gt;</pre>
<p>Si no podemos crearnos el elemento <em>img</em> porque la imagen se trata del <em>background</em> de un elemento, tendremos que modificar los estilos justo después de la creación del elemento, sin esperar al <em>onload</em> del <em>body</em> para evitar que el elemento no cargue el fondo hasta que toda la página se cargue (en este caso también conocemos el nombre de las imágenes y siguen una serie numérica:</p>
<pre>&lt;h1 id="cabecera"&gt;Cabecera H1&lt;/h1&gt;
&lt;script type="text/javascript"&gt;
document.getElementById("cabecera").style.background = "url("+parseInt(Math.random()*4+1)+".png) no-repeat top left";
&lt;/script&gt;</pre>
<p>El último caso, aunque este se puede juntar con los dos anteriores, es cuando el nombre de las imágenes no lleva una nomenclatura fácil de seguir como en los dos casos anteriores. Para ello, tendremos que guardar el nombre de las imágenes en un <em>array</em> y luego acceder a sus elementos:</p>
<pre><code>&lt;script type="text/javascript"&gt;
var imagenes = new Array();
imagenes[0] = "fondo-bonito.png";
imagenes[1] = "fondo-moderno.png";
imagenes[2] = "fondo-clasico.png";
imagenes[3] = "fondo-sencillo.png";
document.write('&lt;img src="'+imagenes[parseInt(Math.random()*4)]+'" alt="Cabecera IMG Array" /&gt;');
&lt;/script&gt;</code></pre>
<h3>PHP</h3>
<p>Quizás con los métodos anteriores bastase, pero para crear un código HTML más limpio, es conveniente seleccionar la imagen a mostrar en el servidor. Además, el usuario no sabrá la ruta real de la imagen, ya que accedemos mediante la llamada a un script. Y podemos hacer que las imágenes no estén disponibles al usuario directamente (fuera del acceso del servidor web). En este caso hemos incluido las imágenes en el mismo directorio que el script:</p>
<pre><code>
&lt;?php
// Filtra los elementos de un array y solo selecciona los que tienen la url de una imagen
function filtro($elem) {
return preg_match('/.*\.(png|gif|jpg)$/', $elem);
}
// Obtenemos los ficheros del directorio actual y tan solo nos quedamos con las imágenes
$ficheros = array_values(array_filter(scandir(getcwd()), "filtro"));
// Posición aleatoria
$pos = rand(0, count($ficheros)-1);
$img = 0;
$dirAct = getcwd();
if (preg_match('/.*\.png$/', $ficheros[$pos])) {
$img = imagecreatefrompng($dirAct . "/" . $ficheros[$pos]);
header("Content-type: image/png");
imagepng($img);
} else if (preg_match('/.*\.gif$/', $ficheros[$pos])) {
$img = imagecreatefromgif($dirAct . "/" . $ficheros[$pos]);
header("Content-type: image/gif");
imagegif($img);
} else if (preg_match('/.*\.jpeg$/', $ficheros[$pos])) {
$img = imagecreatefromjpeg($dirAct . "/" . $ficheros[$pos]);
header("Content-type: image/jpeg");
imagejpeg($img);
}
?&gt;</code></pre>
<h3>Recursos</h3>
<p>Generadores de ayer y hoy que te lo dan casi todo hecho:</p>
<p><a href="http://www.tubatomic.com/revolver/">
Revolver</a> (Vía <a href="http://www.htmllife.com/archivos/revolver-una-herramienta-para-mostrar-imagenes/">HTML Life</a>)</p>
<p><a href="http://www.automaticlabs.com/products/rotator">Rotator</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sentidoweb.com/2006/04/05/rotar-imagenes-aleatoriamente.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

