Creo que te estas complicando demasiado. Yo usaria array sin dudarlo, y NO, NO tienes que saber las imagenes que tienes de antemano.
Un ejemplo:
Código PHP:
<?
$dir = opendir("./fotos/"); // Abrimos el directorio de las fotos.
$lista = array(); // Creamos una array vacio.
while($leer = readdir($dir))
{
// Obtenemos la extension.
$ext = end(explode(".",$leer));
// Vamos llenando el array si son extensiones validas.
if($ext == "gif" || $ext == "jpg") $lista[] .= $leer;
}
//Cerramos el directorio.
closedir($dir);
// Mezclamos aleatoriamente el array.
shuffle($lista);
// Contamos el numero de fotos.
$total = count($lista);
// Para prevenir errores, si el numero de fotos a mostrar es mayor que las que hay
// mostramos las que hay.
$num_images = 4;
if($total < $num_images) $num_images = $total;
// Mostramos las fotos.
for($i = 0; $i < $num_images; $i++)
{
echo '<img src="'.$lista[$i].'" />';
}
?>
Con esto muestras 4 imagenes ("$num_images") del directorio ("$dir") de forma aleatoria.
Para el tema del tamaño tienes que usar alguna libreria grafica, por ejemplo GD library. A mi me funciona bastante bien.
Tienes mucha documentacion, la mayor parte traducida, para obtener tamaños, manipular, etc en:
Gd_info
Espero que te sirva. Un saludo.