2010-11-30 109 views
1

我的帖子後,如何調整到一個較小的寬度(最大寬度爲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** 
+0

您的問題有沒有關係數據庫。它說「找不到文件」。檢查文件路徑。存儲在數據庫中 – 2010-11-30 10:05:50

+0

長的文件,你必須開始獨立的PHP程序,從而在頁面上的每個圖像再拍連接到數據庫。這對網絡開發來說是不可接受的開銷。所有靜態數據(如圖像)應按原樣提供,而不是通過動態頁面。 – 2010-11-30 10:07:55

回答

0

如果你並不真的需要爲此編寫自己的代碼,你可以嘗試一些已經出來的解決方案那裏。

這是一個很好的腳本 http://phpthumb.gxdlabs.com/

我不知道,如果你可以使用它的圖像數據保存到數據庫中,但最壞的情況是

你調整圖像,並將其保存到本地文件夾 使用的file_get_contents讀取圖像並保存到服務器上的數據庫 刪除臨時圖像。

但我同意那些誰說,你應該將圖像存儲在文件系統,而不是數據庫。

相關問題