Cut photo while generating thumbnail php [duplicate]

0

I have a class that generates thumbnail correctly, but when sending photos vertically, it stretches. How would I go into this class to crop or resize the photo so that it fits the thumbnail dimensions?

/**
* Cria thumbnail das imagens
* @return $diretorioThumb.$codificarFoto
* @param $foto
*/
public function gerarThumb($foto){

  $diretorioNormal = "produtos/";
  $diretorioThumb = "produtos/thumb/";

  $fotoDir = $diretorioNormal.$foto;
  list($largura,$altura) = getimagesize($fotoDir);

  $novaLargura = 240;
  $novaAltura = 165;
  $codificarFoto = $foto;

   list($arquivo,$extensao) = explode(".",$foto);

    if($extensao == "jpg" || $extensao == "jpeg" || $extensao == "JPG"){
      $miniatura = imagecreatetruecolor($novaLargura, $novaAltura);
      $imagem = imagecreatefromjpeg($fotoDir);
      imagecopyresampled($miniatura, $imagem, 0, 0, 0, 0, $novaLargura, $novaAltura, $largura, $altura);
      imagejpeg($miniatura,$diretorioThumb.$codificarFoto,90);
    }
    if($extensao == "png"){
      $miniaturaPNG = imagecreatetruecolor($novaLargura, $novaAltura);
      $imagemPNG = imagecreatefrompng($fotoDir);
      imagecopyresampled($miniaturaPNG, $imagemPNG, 0, 0, 0, 0, $novaLargura, $novaAltura, $largura, $altura);
      imagepng($miniaturaPNG,$diretorioThumb.$codificarFoto,null,90);
    }
    return $diretorioThumb.$codificarFoto;
} // fim do método gerarThumb
    
asked by anonymous 06.11.2017 / 18:23

2 answers

1

I was able to resolve based on from this role , however you have this too for trim :

/**
* Cria thumbnail das imagens
* @return $diretorioThumb.$codificarFoto
* @param $foto
*/
public function gerarThumb($foto){

$diretorioNormal = "produtos/";
$diretorioThumb = "produtos/thumb/";

$fotoDir = $diretorioNormal.$foto;

list($largura,$altura) = getimagesize($fotoDir);
list($arquivo,$extensao) = explode(".",$foto);

if($extensao == "jpg" || $extensao == "jpeg"){
  if($largura > $altura){
      $novaLargura = 240;
      $novaAltura = 165;
      $miniatura = imagecreatetruecolor($novaLargura, $novaAltura);
      $imagem = imagecreatefromjpeg($fotoDir);
      imagecopyresampled($miniatura, $imagem, 0, 0, 0, 0, $novaLargura, $novaAltura, $largura, $altura);
      imagejpeg($miniatura,$diretorioThumb.$foto,90);
  }
  if($altura > $largura){
    $wmax = 240;
    $hmax = 170;
    $quebrar = explode(".", $foto);
    $fileExt = end($quebrar);
    $this->recortar($fotoDir, $diretorioThumb.$foto, $wmax, $hmax, $fileExt);
  }
}if($extensao == "png"){
  $miniaturaPNG = imagecreatetruecolor($novaLargura, $novaAltura);
  $imagemPNG = imagecreatefrompng($fotoDir);
  imagecopyresampled($miniaturaPNG, $imagemPNG, 0, 0, 0, 0, $novaLargura, $novaAltura, $largura, $altura);
  imagepng($miniaturaPNG,$diretorioThumb.$foto,null,90);
}
return $diretorioThumb.$foto;
} // fim do método gerarThumb

/**
* Recorta a imagem
* Função retirada do site http://www.developphp.com/video/PHP/Crop-Thumbnail-Image-Function-Tutorial-jpg-gif-png
* @param $target, $newcopy, $w, $h, $ext
*/
public function recortar($target, $newcopy, $w, $h, $ext) {

    list($w_orig, $h_orig) = getimagesize($target);
    $scale_ratio = $w_orig / $h_orig;
    if (($w / $h) > $scale_ratio) {
           $w = $h * $scale_ratio;
    } else {
           $h = $w / $scale_ratio;
    }
    $img = "";
    $ext = strtolower($ext);
    if ($ext == "gif"){
    $img = imagecreatefromgif($target);
    } else if($ext =="png"){
    $img = imagecreatefrompng($target);
    } else {
    $img = imagecreatefromjpeg($target);
    }
    $tci = imagecreatetruecolor($w, $h);
    // imagecopyresampled(dst_img, src_img, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h)
    imagecopyresampled($tci, $img, 0, 0, 0, 0, $w, $h, $w_orig, $h_orig);
    if ($ext == "gif"){
        imagegif($tci, $newcopy);
    } else if($ext =="png"){
        imagepng($tci, $newcopy);
    } else {
        imagejpeg($tci, $newcopy, 90);
    }
} // fim do método recortar()
    
06.11.2017 / 22:13
-1

I always use this library link Here are some examples that help link

    
06.11.2017 / 19:29