什么是为社交网站存储个人资料图片的最有效方式?

时间:2010-07-27 08:36:30

标签: php image-processing

我建立了一个简单的社交网络,并让用户能够上传个人资料照片。问题是我已将其设置为上传时图片大小调整为我网站设计中使用的两种尺寸。但是,客户需要在一段时间后进行设计更改。新的设计思想需要不同的图像大小。这就像经过2年的网站运行后,我们有很多用户提供个人资料图片。

此时我认为我在将图像大小调整为固定大小时犯了一个错误,因为现在我将不得不调整用于调整系统中已经使用新设计设置的所有图像的大小。问题是什么 - 在服务器上维护不同尺寸的图像的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

根据图像的绝对数量(如果图像数量过多,这可能不太实际),我会在永久位置保留原始图像,并将调整大小的图像保存在不同的缓存位置以供下一个使用客户决定更改规格的时间。 : - )

如果空间有限且您不关心缓存已调整大小的图像,您可以随时使用php的GD库调整它们的大小。

答案 1 :(得分:0)

我不认为在整个设计变更中有任何社交网络会改变他们的图像尺寸......而且这是一个很好的理由。

我想你可以保留图像的最高分辨率版本,并批量处理大量新图像,将图像尺寸作为文件名的一部分,以便轻松分组。

答案 2 :(得分:0)

如果你想省去一次调整大小的麻烦,你可以有一个条件来检查它是否已经调整到新大小,然后在第一次访问图像时调整大小。

  $edit_file = $_edit_id.'_'.basename($_FILES['edit_imagename']['name']);
  $uploadfile = $orig_uploaddir . $edit_file;
  if (move_uploaded_file($_FILES['edit_imagename']['tmp_name'], $uploadfile)) 
    {
    //---resize image to regular and thumbnail-----------------------------------b
    $src = imagecreatefromjpeg($uploadfile);
    $image_info=getimagesize($uploadfile);
    list($width,$height)=$image_info;
    //---create 400x400 fullsize--------------b
    $newwidth=400;
    $newheight=round(($height/$width)*$newwidth);
    if ($newheight>400)
      {
      $newheight=400;
      $newwidth=round(($width/$height)*$newheight);
      }
    $tmp=imagecreatetruecolor($newwidth,$newheight);
    imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
    $filename = $uploaddir . $_edit_id.'_400_'.basename($_FILES['edit_imagename']['name']);
    imagejpeg($tmp,$filename,100);
    //---create 400x400 fullsize--------------e
    //---create 200x200 thumbnail--------------b
    $tn_width=200;
    $tn_height=round(($height/$width)*$tn_width);
    if ($tn_height>200)
      {
      $tn_height=200;
      $tn_width=round(($width/$height)*$tn_height);
      }
    $tmp=imagecreatetruecolor($tn_width,$tn_height);
    imagecopyresampled($tmp,$src,0,0,0,0,$tn_width,$tn_height,$width,$height);
    $filename = $uploaddir . $_edit_id.'_200_'.basename($_FILES['edit_imagename']['name']);
    imagejpeg($tmp,$filename,100);
    //---create 200x200 thumbnail--------------e
    imagedestroy($tmp); 

答案 3 :(得分:-1)

我发现最好创建缩略图脚本并动态调整照片大小,这样就可以存储更多图片。它会降低你的硬盘使用率50%;但它会为你的页面加载增加几毫秒。