Код на обрезание превьюшек (Thumbs)

Статус
В этой теме нельзя размещать новые ответы.

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
466
Реакции
16
Всем привет!
Столкнулся с проблемой, очень нужно что бы после загрузки изображений, превьюшки обрезались, что бы все (Thumbs) были ровными квадратиками независимо от их высоты или ширины,
вот код где проходят ресайзы:

PHP:
 function resize ($resizeone, $resizetou, $newdimone, $newdimtou, $resizestry, $resizefor, $resizefive)
  {
    if ($resizefive == 2)
    {
      $resizeone = imagecreatefromjpeg ($resizeone);
      $resizesex = imagecreatetruecolor ($resizestry, $resizefor);
      imagecopyresampled ($resizesex, $resizeone, 0, 0, 0, 0, $resizestry, $resizefor, $newdimone, $newdimtou);
      touch ($resizetou);
      imagejpeg ($resizesex, $resizetou, 100);
      imagedestroy ($resizesex);
      return null;
    }

    if ($resizefive == 3)
    {
      $resizeone = imagecreatefrompng ($resizeone);
      $resizesex = imagecreatetruecolor ($resizestry, $resizefor);
      imagecopyresampled ($resizesex, $resizeone, 0, 0, 0, 0, $resizestry, $resizefor, $newdimone, $newdimtou);
      touch ($resizetou);
      imagepng ($resizesex, $resizetou, 100);
      imagedestroy ($resizesex);
    }

  }

и тут

PHP:
$sizes = array ('enlarge' => array (3000, 3000), 'large' => array (448, 336), 'thumb' => array (200, 300), 'small' => array (120, 90));
- (Другой файл)
 
Для решения проблемы имхо легче использовать готовые классы работы с превьюшками

 
можно сделать так:
PHP:
  function resize ($resizeone, $resizetou, $newdimone, $newdimtou, $resizestry, $resizefor, $resizefive, $crop = false)
  {
    if ($resizefive == 2)
    {
      $resizeone = imagecreatefromjpeg ($resizeone);
      $resizesex = imagecreatetruecolor ($resizestry, $resizefor);
      if($crop) {
        $scale=min((float)($newdimone/$resizestry),(float)($newdimtou/$resizefor)); 
        // coords to crop
        $sx=(float)($newdimone-($scale*$resizestry));
        $sy=(float)($newdimtou-($scale*$resizefor));   
        // cropped image size
        $sw=(float)($newdimone-$sx);
        $sh=(float)($newdimtou-$sy); 
        imagecopyresampled ($resizesex, $resizeone, 0, 0, $sx/2, $sy/2, $resizestry, $resizefor, $sw, $sh);
      } else {
        imagecopyresampled ($resizesex, $resizeone, 0, 0, 0, 0, $resizestry, $resizefor, $newdimone, $newdimtou);
      }
      touch ($resizetou);
      imagejpeg ($resizesex, $resizetou);
      imagedestroy ($resizesex);
      return null;
    }
}
если в функцию будет передан, последний аргумент $crop, то картинка будет не только уменьшатся до заданного размера, но и будут обрезаться края, чтобы получилась пропорция заданного размера.
 
  • Нравится
Реакции: vave
Вот понравился вариант:

Описание:

Демо:

Исходник:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху