调整图像大小 - Symfony

时间:2011-01-07 13:23:27

标签: symfony1

我有许多图像在我的数据库中作为blob数据提供。 我知道这不是一个好主意,但它正是我正在使用的。

我的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中给它们一个大小/宽度会扭曲它们中的一些。

无论如何,我可以在显示之前调整大小/裁剪图像吗?

由于

3 个答案:

答案 0 :(得分:3)

sfThumbnailPlugin是我在许多项目中使用的,它非常棒。 Symfony 1.0有一个旧版本,如果你正在使用它。默认情况下它使用GD,但您可以使用它ImageMagick并使用它做一些非常酷的事情。

答案 1 :(得分:1)

如何将图像添加到数据库?

如果是通过上传表单,最好的方法是使用GD或其他库创建适当大小/尺寸的缩略图,并将其存储在第二个blob列中。

否则,您可以在html中指定单个维度,图片将保留其尺寸。

答案 2 :(得分: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;
    }
}