2010-12-05 165 views
2

奇怪的是,我無法找到關於此主題的任何信息:用戶個人資料照片。允許用戶上傳他們的個人資料照片

以下是否有PHP解決方案?

  • 允許用戶上傳他們的硬盤驅動器PIC用於存儲我們的服務器
  • 在縮小,如果是過大的圖像;擴大它,如果它太小(高度/寬度)

這是很容易建立自己?還是已經有一個庫了?

回答

3

上傳和存儲圖像,我會建議產生一個隨機文件名的圖片,而不是保持原始文件名稱。這將防止衝突並增加一些安全措施。我會建議一個很長的名字;只是隨機的數字和字母。

然後,將隨機文件名與您的用戶信息一起存儲在數據庫記錄中。這樣,您就不必擔心文件名和用戶名不同步,正如我之前所說的,有人將無法猜測Joe Schmoe的個人資料圖片是以JoeSchmoe.jpg的形式存儲的。

當你到達圖像大小調整部分時,使用下面我修改過的函數(來自PHP用戶註釋)。在你的情況下,"images/smallerpicture.jpeg"可能會被"images/<some random name here>.jpeg"取代。

實施例:

scaleImage("images/bigpicture.jpeg", 100, 100, "images/smallerpicture.jpeg"); 

功能:

function scaleImage($source, $max_width, $max_height, $destination) { 
    list($width, $height) = getimagesize($source); 
    if ($width > 150 || $height > 150) { 
     $ratioh = $max_height/$height; 
     $ratiow = $max_width/$width; 
     $ratio = min($ratioh, $ratiow); 
     // New dimensions 
     $newwidth = intval($ratio * $width); 
     $newheight = intval($ratio * $height); 

     $newImage = imagecreatetruecolor($newwidth, $newheight); 

     $exts = array("gif", "jpg", "jpeg", "png"); 
     $pathInfo = pathinfo($source); 
     $ext = trim(strtolower($pathInfo["extension"])); 

     $sourceImage = null; 

     // Generate source image depending on file type 
     switch ($ext) { 
     case "jpg": 
     case "jpeg": 
      $sourceImage = imagecreatefromjpeg($source); 
      break; 
     case "gif": 
      $sourceImage = imagecreatefromgif($source); 
      break; 
     case "png": 
      $sourceImage = imagecreatefrompng($source); 
      break; 
     } 

     imagecopyresampled($newImage, $sourceImage, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

     // Output file depending on type 
     switch ($ext) { 
     case "jpg": 
     case "jpeg": 
      imagejpeg($newImage, $destination); 
      break; 
     case "gif": 
      imagegif($newImage, $destination); 
      break; 
     case "png": 
      imagepng($newImage, $destination); 
      break; 
     } 
    } 
} 

它支持的GIF,JPG文件,和PNG格式。

+0

您還應該驗證上傳的圖片是否有效可能是黑客欺騙,並禁用php或任何其他腳本執行在您存儲圖像的目錄中 – 2015-03-26 18:00:54

1

很難回答這個是因爲「easy」是非常相對的術語。對於體驗PHP編碼器很容易,對於初學者來說並不那麼容易。是的,有圖像調整大小的庫。你可能要處理自己上傳的處理,它真的很容易 調整大小,你可以看看pear library here

相關問題