Librería GD: Usaremos un archivo php para hacer la carga de las imágenes, lo llamaremos thumb.php y lo colocaremos en la raíz de nuestra web. Lo llamaremos de la siguiente forma:

<img src="/thumb.php?file=/public/image1.png&width=100" alt="miniatura" />

Le pasamos 2 parámetros al script:

file: la ruta a la imagen que queremos redimensionar.

width: la nueva anchura.

Lo primero que tenemos que hacer el calcular las nuevas dimensiones de la imagen, en nuestro ejemplo estamos marcando la anchura, y la altura se calcula a partir de ésta. Cuando ya tenemos las nuevas dimensiones vemos en qué formato está y luego escribimos las cabeceras correspondientes y la mostramos. El código del archivo thumb.php sería el siguiente:

$file = $_GET["file"];
$width = $_GET["width"];

// Ponemos el . antes del nombre del archivo porque estamos considerando que la ruta está a partir del archivo thumb.php
$file_info = getimagesize("." . $file);
// Obtenemos la relación de aspecto
$ratio = $file_info[0] / $file_info[1];

// Calculamos las nuevas dimensiones
$newwidth = $width;
$newheight = round($newwidth / $ratio);

// Sacamos la extensión del archivo
$ext = explode(".", $file);
$ext = strtolower($ext[count($ext) - 1]);
if ($ext == "jpeg") $ext = "jpg";

// Dependiendo de la extensión llamamos a distintas funciones
switch ($ext) {
        case "jpg":
                $img = imagecreatefromjpeg("." . $file);
        break;
        case "png":
                $img = imagecreatefrompng("." . $file);
        break;
        case "gif":
                $img = imagecreatefromgif("." . $file);
        break;
}
// Creamos la miniatura
$thumb = imagecreatetruecolor($newwidth, $newheight);
// La redimensionamos
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $file_info[0], $file_info[1]);
// La mostramos como jpg
header("Content-type: image/jpeg");
imagejpeg($thumb, null, 80);

Imagemagick Si usamos imagemagick tenemos las ventajas de ahorrar consumo de memoria y los inconvenientes de que tenemos que tenerlo instalado en nuestro servidor. En caso de tenerlo disponible, el script resultante sería muy parecido al anterior.
$file = $_GET["file"];
$width = $_GET["width"];

// Ponemos el . antes del nombre del archivo porque estamos considerando que la ruta está a partir del archivo thumb.php
$file_info = getimagesize("." . $file);
// Obtenemos la relación de aspecto
$ratio = $file_info[0] / $file_info[1];

// Calculamos las nuevas dimensiones
$newwidth = $width;
$newheight = round($newwidth / $ratio);

// No necesitamos sacar la extensión ya que el comando convert ya detecta el formato
header("Content-type: image/jpeg");
passthru("convert -scale ".($newwidth)."x".($newheight)."! "./".$file."" JPG:-");