Lo puedes hacer con
gd o con
imagemagick, este último utiliza mejor los recursos, usa más el disco duro que la ram, pero es un poco dolor de cabeza para instalar, GD ya viene con PHP y si buscas cualquier tutorial por ahí verás que es muy sencillo de realizar lo que dices.
No te recomiendo crear las miniaturas al vuelo porque te generará bastantes gastos en el servidor. Crealas solo cuando no existan con la medida que quieres, en caso contrario carga la imagen del disco si ya la has creado previamente. Ahorrarás mucho procesador.