Crop photo when generating thumbnail php

Asked

Viewed 160 times

0

I have a class that generates thumbnail correctly, but when sending photos vertically, it is stretched. As I would inside this class I crop or resize the photo so that it fits in 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

2 answers

1

I managed to solve based on top of that function, but has this also to cut out:

/**
* 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()

-1

  • Hello Fabio. I tried to use this library, but it gives the following error: Fatal error: Cannot declare class Wideimage_invalidimagehandleexception, because the name is already in use in

  • There is no way to do this directly in PHP without libraries? VI which has imagecrop(), but how to use this function?

  • There is, but there’s no point in having a job if there’s something ready. This is the purpose of libraries, cool you already get this habit because they are good practices. But if you still want the job, take a look at how the library code works.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.