Pokud je mi známo, nemůžete změnit velikost obrázku před nahrávání. (Mohu se mýlit!) Když však nahrajete obrázek, přejde do dočasného souboru. Můžete změnit velikost dočasného obrázku a zkopírovat obrázek se změněnou velikostí do jeho konečného umístění.
Tento kód byl upraven z fragmentu ve FliquidStudios:Změna velikosti obrázků v PHP pomocí GD a Imagick .
Protože (zdá se), že chcete zachovat konstantní šířku, nemusíte ve skutečnosti provádět mnoho testů poměru.
Aktualizace:
Měli byste být schopni jednoduše použít toto místo vašeho původního kódu. Většina z nich je nezměněna.
<?php
// resizes an image to fit a given width in pixels.
// works with BMP, PNG, JPEG, and GIF
// $file is overwritten
function fit_image_file_to_width($file, $w, $mime = 'image/jpeg') {
list($width, $height) = getimagesize($file);
$newwidth = $w;
$newheight = $w * $height / $width;
switch ($mime) {
case 'image/jpeg':
$src = imagecreatefromjpeg($file);
break;
case 'image/png';
$src = imagecreatefrompng($file);
break;
case 'image/bmp';
$src = imagecreatefromwbmp($file);
break;
case 'image/gif';
$src = imagecreatefromgif($file);
break;
}
$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
switch ($mime) {
case 'image/jpeg':
imagejpeg($dst, $file);
break;
case 'image/png';
imagealphablending($dst, false);
imagesavealpha($dst, true);
imagepng($dst, $file);
break;
case 'image/bmp';
imagewbmp($dst, $file);
break;
case 'image/gif';
imagegif($dst, $file);
break;
}
imagedestroy($dst);
}
// init file vars
$pic = $_FILES['photo']['name'];
$target = 'uploads/' . basename( $_FILES['photo']['name']);
$temp_name = $_FILES['photo']['tmp_name'];
$type = $_FILES["photo"]["type"];
// Connects to your Database
mysql_connect("hostname", "username", "password") or die(mysql_error()) ;
mysql_select_db("database") or die(mysql_error()) ;
// get form data
$name = mysql_real_escape_string(isset($_POST['name']) ? $_POST['name'] : 'No name');
//Writes the information to the database
mysql_query("INSERT INTO `table` (name, photo) VALUES ('$name','$pic')") ;
// resize the image in the tmp directorys
fit_image_file_to_width($temp_name, 200, $type);
//Writes the photo to the server
if(move_uploaded_file($temp_name, $target)) {
//Tells you if its all ok
echo "The file ". basename( $_FILES['photo']['name'] ). " has been uploaded";
} else {
//Gives and error if its not
echo "Sorry, there was a problem uploading your file.";
}
?>