我的帖子後,如何調整到一個較小的寬度(最大寬度爲80,最小也80),我應該檢查安全的目的呢?PHP保存到mysql數據庫之前調整圖像大小?
我當前的代碼:
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 = imagecreatefromjpeg ($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;
}
在mysql數據庫中的數據類型是MEDIUMBLOB,因爲它只能存儲少量文件
對不起,沒有提到我的問題,它不工作的代碼。錯誤是:
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**
您的問題有沒有關係數據庫。它說「找不到文件」。檢查文件路徑。存儲在數據庫中 – 2010-11-30 10:05:50
長的文件,你必須開始獨立的PHP程序,從而在頁面上的每個圖像再拍連接到數據庫。這對網絡開發來說是不可接受的開銷。所有靜態數據(如圖像)應按原樣提供,而不是通過動態頁面。 – 2010-11-30 10:07:55