我有许多图像在我的数据库中作为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中给它们一个大小/宽度会扭曲它们中的一些。
无论如何,我可以在显示之前调整大小/裁剪图像吗?
由于
答案 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;
}
}