PHP resize image before save to mysql database?
After I got the post, how to resize to a smaller width (maximum width is 80, min also 80) and what should I check for security purposes?
My current code:
if(!empty($_FILES)) {
# Resize Image function
$return=true;
function resizeImage($originalImage,$toWidth,$toHeight){
// Get the original geometry and calculate scales
list($width, $height) = getimagesize($originalImage);
$xscale=$width/$toWidth;
$yscale=$height/$toHeight;
// Recalculate new size with default ratio
if ($yscale>$xscale){
$new_width = round($width * (1/$yscale));
$new_height = round($height * (1/$yscale));
}
else {
$new_width = round($width * (1/$xscale));
$new_height = round($height * (1/$xscale));
}
// Resize the original image
$imageResized = imagecreatetruecolor($new_width, $new_height);
$imageTmp = imagecr开发者_如何学JAVAeatefromjpeg ($originalImage);
imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
return $imageResized;
}
// Get the file information
$userfile_name = $_FILES['profile_picture']['name'];
$userfile_tmp = $_FILES['profile_picture']['tmp_name'];
$userfile_size = $_FILES['profile_picture']['size'];
$userfile_type = $_FILES['profile_picture']['type'];
$filename = basename($_FILES['profile_picture']['name']);
$file_ext = strtolower(substr($filename, strrpos($filename, '.') + 1));
//Only process if the file is a JPG and below the allowed limit
if((!empty($_FILES["profile_picture"])) && ($_FILES['profile_picture']['error'] == 0)) {
$allowed_image_types = array('image/pjpeg'=>"jpg",'image/jpeg'=>"jpg",'image/jpg'=>"jpg",'image/png'=>"png",'image/x-png'=>"png",'image/gif'=>"gif");
$allowed_image_ext = array_unique($allowed_image_types); // Do not change this
foreach ($allowed_image_types as $mime_type => $ext) {
if($file_ext==$ext ){
$return=false;
break;
} else {
$return=true;
}
}
if ($userfile_size > (7*1048576)) { # 7 means 7 mb
$return=false;
}
} else {
$return=false;
}
//Everything is ok, so we can upload the image.
if (strlen($return)==0){
$widthAndHeight = getimagesize($userfile_tmp . "." . $file_ext); //EDITED QUESTION
$width = $widthAndHeight[0];
$height = $widthAndHeight[1];
if ($width > 80){
$scale = 80/$width;
$height = $height * $scale;
$data = resizeImage($userfile_name,80,$height,$scale);
$data = mysql_real_escape_string($data);
} else {
$data = mysql_real_escape_string($userfile_name);
}
$update = mysql_query("UPDATE `avatar` set image = '{$data}' WHERE userid = '" . $_SESSION['userid'] . " . '");
} else {
$return=false;
}
The datatype in mysql database is MediumBlob since it only store small file
Sorry for not mention my problem, the code its not working. The error is:
Warning: getimagesize(C:\wamp\tmp\php991B.tmp.png) [function.getimagesize]: failed to open stream: No such file or directory in C:\wamp\www\XXX\avatar.php on line 82**strong text**
Better way will be - to store the image in file system and store a ref to the file in the database. (For the resizing you can use GD library)
Try this link: http://www.php.net/manual/en/function.imagecopyresized.php
If you don't really need to write your own code for this, you can try out some of the solutions that are already out there.
This is an excellent script http://phpthumb.gxdlabs.com/
I am not sure if you can save image data to a database using it, but worst case scenario is
you resize the image and save it to a local folder use file_get_contents to read the image and save to db delete temp image on server.
But I agree with those who say you should store the images in the filesystem, not the database.
精彩评论