2010-12-05 194 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

相关问题