2011-01-07 72 views
1

我有一些圖像作爲我的數據庫中的blob數據。 我知道這不是一個好主意,但這是我正在使用的。調整圖像大小 - Symfony

我在Peer類下面的代碼:

public function getImagesPath() 
{ 
    $file_srcs = false; 
    $fp = $this->getPhoto->getBlobData(); 

    if ($fp !== null) 
    { 
     $file = stream_get_contents($fp); 
     $file_srcs = '/uploads/gallery/'.$this->getId().'.jpg'; 

    } 
return $file_srcs; 

}

然後我把這個在我的模板,像這樣:

  $path = $item->getImagesPath(); 
      if ($path) 
      { 
       echo '<img src="'.$path.'" alt="Thumbnail for '.$photo->getName().'" width="153" height="153" />'; 
      } 

現在這個效果很好,但是,我有一些形狀正方形或矩形的圖像。 在img src中給它們一個大小/寬度會扭曲它們中的一些。

無論如何,我可以在顯示圖像之前調整/裁剪圖像嗎?

感謝

回答

1

您可以使用imagecreatefromstring和imagecopyresampled。這是我使用的代碼,我改變了與你的blob一起工作。如果原始尺寸寬高比與目標圖像尺寸不匹配,則還會添加白色背景。

static function CreateThumbnailFromBlob($blobData, $dstWidth = 100.0, $dstHeight = 100.0){ 
    $oldImg = @imagecreatefromstring($olduri); 
    if($oldImg){ 
     $realOldW = imagesx($oldImg); 
     $realOldH = imagesy($oldImg); 
     $destX = 0; 
     $destY = 0; 

     if($realOldH>=$realOldW && $realOldH>0){ 
      $realY = $dstHeight; 
      $realX = round($realY*$realOldW/$realOldH); 
      $destX = round($dstWidth/2-$realX/2); 
     }else{ 
      $realX = $dstWidth; 
      if($realOldW>0) 
       $realY = round($realX*$realOldH/$realOldW); 
      else 
       $realY = $dstHeight; 
      $destY = round($dstHeight/2-$realY/2); 
     } 
     $newImg = @imagecreatetruecolor($dstWidth, $dstHeight); 
     $white = imagecolorallocate($newImg, 255, 255, 255); 
     imagefill($newImg, 1, 1, $white); 
     imagecopyresampled($newImg,$oldImg,$destX,$destY, 
          0,0,$realX,$realY,$realOldW,$realOldH); 
     imagedestroy($oldImg); 
     return $newImg; 
    } 
} 
3

sfThumbnailPlugin是我用過的一些項目,這是非常真棒。如果這是你正在使用的版本,那麼Symfony 1.0有一箇舊版本。默認情況下它使用GD,但你可以使用ImageMagick,並用它做一些非常酷的事情。

+0

但是,這是否支持創建大拇指?我不想將圖像保存爲服務器上的縮略圖 – terrid25 2011-01-07 13:38:36

+0

嗯..我90%確定它需要一個輸出文件的圖像,如何將它們寫入一個tmp目錄,然後擺脫它們呢? – sjobe 2011-01-07 13:48:43

+0

我試圖在文件系統上的任何位置顯示它們,如果可能的話。我看到了jsThumbPlugin,但這隻適用於1.0,我正在使用1.4(Propel) – terrid25 2011-01-07 13:53:52

1

你如何將圖像添加到數據庫?

如果是通過上傳表單,最好的方法是使用GD或其他庫創建適當大小/尺寸的縮略圖,並將其存儲在第二個BLOB列中。

否則,您可以在html中指定單個維度,並且圖片將保留其維度。