Hola:
Si no te importa que se vea deformada, fíjate en los valores que acepta imagecopy resized... creo que sería así:
imagecopyresized($img,$muestra,0,0,0,0,
100,
100,$anch o,$alto);...
Si no quieres que se deforme, creo que los pasos lógicos sería primero poner el cuadrado, pero luego darle un fondo adecuado (blanco o tal vez gris):
$gris = imagecolorallocate($img, 127, 127, 127);
imagefill($img, $gris);
Luego hacer los cálculos para el tamaño, y copiar esos cálculos en las coordenadas de la miniatura...
... pero insisto que ese cálculo es en mi opinión absurdo, ya que en un cuadrado de 100x100 puedes centrar una imagen de 100x30/30x100 (o cualquier otro) y nadie se dará cuenta... simplemente haciendo que esa imagen aparezca centrada en una capa con estilos...
Saludos