Изменение размера изображения - Symfony - PullRequest
1 голос
/ 07 января 2011

В моей базе данных есть несколько изображений, которые сортируются как данные 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 ]

3 голосов
/ 07 января 2011

sfThumbnailPlugin - это то, что я использовал в ряде проектов, и это довольно круто.Существует более старая версия Symfony 1.0, если вы ее используете.По умолчанию он использует GD, но вы можете использовать ImageMagick и делать с ним довольно крутые вещи.

1 голос
/ 24 января 2011

Возможно, вы можете использовать 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;
    }
}
1 голос
/ 07 января 2011

Как вы добавляете изображения в базу данных?

Если это через форму загрузки, лучшим способом было бы создать миниатюру соответствующего размера / размеров с помощью GD или другой библиотеки и сохранить ее во втором столбце большого двоичного объекта.

В противном случае вы можете указать одно измерение в html, и картинка сохранит свои размеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...