I think you're trying to do this through a form for submitting the image, so I worked out an answer thinking about it.
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="img" />
<input type="submit" name="ok" value="Enviar" />
</form>
<?php
$tempname = $_FILES["img"]["tmp_name"]; // Caminho completo da imagem original.
$extension = strtolower(pathinfo($_FILES["img"]["name"], PATHINFO_EXTENSION)); // Extraindo extensão com 'pathinfo' da imagem original.
$name = "new_img"; // Nome do novo arquivo de imagem
$url = "images/".$name.".".$extension; // Caminho onde será salvo a nova imagem
$max_width = 300; // Largura final da imagem
$max_height = 300; // Altura final da imagem
$allowed_extensions = array('gif', 'jpg', 'png'); // Extensões permitidas
if(in_array($extension, $allowed_extensions)) { // Se extensão é permitida...
move_uploaded_file($tempname, $url); // Move para o caminho definido em '$url'
} else return "Arquivo não permitido.";
// Pega a largura, altura, tipo e atributo da imagem
list($image_width, $image_height, $type, $attribute) = getimagesize($url);
// Calcula o coeficiente para centralização
$x = round(($max_width - $image_width) / 2);
$y = round(($max_height - $image_height) / 2);
// Cria uma nova imagem com o novo tamanho
$new_image = imagecreatetruecolor($max_width, $max_height);
// Define o background desta nova imagem (RGB), neste caso, 'branco' como precisa.
$bg = imagecolorallocate($new_image, 255, 255, 255);
imagefill($new_image, 0, 0, $bg);
switch ($type){
case 1: // Se a imagem for GIF...
$source = imagecreatefromgif($url); // Pega a imagem original GIF
imagecopyresampled($new_image, $source, $x, $y, 0, 0, $image_width, $image_height, $image_width, $image_height);
imagegif($new_image, $url); // Gera a nova imagem sobrescrevendo a original
break;
case 2: // Se a imagem for JPG...
$source = imagecreatefromjpeg($url); // Pega a imagem original JPG
imagecopyresampled($new_image, $source, $x, $y, 0, 0, $image_width, $image_height, $image_width, $image_height);
imagejpeg($new_image, $url, 70); // Gera a nova imagem sobrescrevendo a original (com resolução de 70 (vai de 0 à 100))
break;
case 3: // Se a imagem for PNG...
$source = imagecreatefrompng($url); // Pega a imagem original PNG
imagecopyresampled($new_image, $source, $x, $y, 0, 0, $image_width, $image_height, $image_width, $image_height);
imagepng($new_image, $url, 9); // Gera a nova imagem sobrescrevendo a original (com compactação de 9 (vai de 0 à 9))
break;
}
// Destrói as imagens criadas
imagedestroy($new_image);
imagedestroy($source);
I just did not comment on the imagecopyresampled()
function, I thought I'd better post this suggested reading:
link