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

Php 为社交网站存储个人资料图片最有效的方法是什么?,php,image-processing,Php,Image Processing,我建立了一个简单的社交网络,让用户能够上传个人资料照片。问题是,我已经把它设置好了,这样上传的图片大小就可以调整到两个大小,这两个大小在我的网站设计中使用。但是,客户需要在一段时间后更改设计。新的设计构思要求图像的尺寸不同。这就像运行了2年的网站,我们有很多用户的个人资料图片 在这一点上,我认为我在将图像大小调整为固定大小时犯了一个错误,因为现在我将不得不对系统上已设置的所有图像的大小进行调整,以便使用新设计进行设置。这就引出了一个问题——在服务器上维护不同大小的图像的最佳方式是什么?我认为没有

我建立了一个简单的社交网络,让用户能够上传个人资料照片。问题是,我已经把它设置好了,这样上传的图片大小就可以调整到两个大小,这两个大小在我的网站设计中使用。但是,客户需要在一段时间后更改设计。新的设计构思要求图像的尺寸不同。这就像运行了2年的网站,我们有很多用户的个人资料图片


在这一点上,我认为我在将图像大小调整为固定大小时犯了一个错误,因为现在我将不得不对系统上已设置的所有图像的大小进行调整,以便使用新设计进行设置。这就引出了一个问题——在服务器上维护不同大小的图像的最佳方式是什么?

我认为没有任何社交网络会在设计变更过程中改变图像大小。。。这有一个很好的理由


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

取决于图像的绝对数量(如果太多,这可能不切实际),我会将原始图像保留在一个永久点上,并将调整大小的图像保留在另一个缓存点上,以备下次客户端决定更改规格时使用。:-)


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

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

如果您想省去一次调整所有页面大小的麻烦,您可以使用一个条件来检查其大小是否已调整为新大小,然后在首次访问图像时调整大小

  $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); 
这里的一般良好做法(如果您能够根据用户基数支付存储费用)是保留一个“原始”版本,该版本比您希望在站点上实际显示的版本大,以便在以后由于重新设计而出现需要时可以重新处理。