em Uncategorized

Criando miniatura de imagem no PHP com a GD

Nesse post eu havia falado, por cima, sobre a biblioteca GD, que possibilita a manipulação de imagens no PHP.

Uma das funcionalidades mais necessárias no PHP é criar uma thumbnail (miniatura) de uma imagem – e certamente é uma das primeiras coisas que alguém que começa a programar em PHP e precisa fazer com imagens, tem a necessidade.

Segue abaixo a função que eu uso – há anos. Não foi desenvovida por mim, achei ela no Google anos atrás, e sei que ela se popularizou!

 

<?php
   //imagem original
    $source_image = "spork.jpg";

   //altura máxima
    $thumb_height = 40;

    //prefixo da miniatura
    $thumb_prefix = "thumb_";

   //qualidade – vai de 0 a 100
    $quality = 100;

   //checa se imagem existe
   if(!file_exists($source_image)) {
      echo "Imagem não encontrada";
   } else {
       //tipos suportados (jpg, png, gif, etc…)
        $supported_types = array(1, 2, 3, 7);

        //retorna informações da imagem
        list($width_orig, $height_orig, $image_type) = getimagesize($source_image);

        //checa se é um tipo suportado
        if(!in_array($image_type, $supported_types)) {
            echo "Tipo não suportado de imagem: " . $image_type;
        }
        else
        {

           //nome da imagem
            $path_parts = pathinfo($source_image);
            $filename = $path_parts["filename"];

            //calcula as proporções
            $aspect_ratio = (float) $width_orig / $height_orig;

            //calcula a largura da thumb baseada na altura
            $thumb_width = round($thumb_height * $aspect_ratio);
 
            //detecta o tipo de arquivo
            $source = imagecreatefromstring(file_get_contents($source_image));

            //cria canvas
            $thumb = imagecreatetruecolor($thumb_width, $thumb_height);

            imagecopyresampled($thumb, $source, 0, 0, 0, 0, $thumb_width, $thumb_height, $width_orig, $height_orig);
           //destrói, para liberar memória
            imagedestroy($source);
 
            //cria thumb baseada no tipo da imagem
            switch ( $image_type )
            {
                case 1:
                    imagegif($im, $fileName);
                    $thumbnail = $thumb_prefix.$filename . ".gif";
                    break;

                case 2:
                    $thumbnail = $thumb_prefix.$filename . ".jpg";
                    imagejpeg($thumb, $thumbnail, $quality);
                    break;

                case 3:
                    imagepng($im, $fileName);
                    $thumbnail = $thumb_prefix.$filename . ".png";
                    break;

                case 7:
                    imagewbmp($im, $fileName);
                    $thumbnail = $thumb_prefix.$filename . ".bmp";
                    break;
            }
        }
    }
?>

Escreva um comentário

Comentário