Criando miniatura de imagem com PHP

Aprenda como criar thumbnails de imagens com PHP

Neste artigo você vai aprender como fazer o upload de uma imagem e gerar uma imagem em miniatura (thumbnail) usando PHP. A imagem que você vai utilizar pode ser nos formatos JPEG, PNG ou GIF.

Primeiro, vamos criar um formulário, para fazer o upload de nosso arquivo.

<form name="form1" method="POST" action="gravar.php" enctype="multipart/form-data">

<label>Foto</label><input type="file" name="foto"><br/>

<input type="submit" value="Enviar">

</form>

No parâmetro "action" informamos o nome da página que vamos criar, que vai receber o arquivo e gerar a miniatura. O method do formulário deve ser POST e você precisa acrescentar o enctype "multipart/form-data" para informar que está enviado arquivos.

No arquivo "gravar.php", vamos inserir primeiro a programação para gravar o arquivo numa pasta temporária. Não esqueça de criar a pasta no mesmo local onde o arquivo PHP for criado.

 

$nome_arquivo = "";

$carimbo = time();

$arquivo = isset($_FILES['foto']) ? $_FILES['foto'] : FALSE; 

if ($arquivo['name'] != ""){

$nome_arquivo=$carimbo."_".$arquivo['name'];

$diretorio = "nome_da_pasta_de_arquivos/"; 

$caminho=$diretorio.$carimbo."_".$nome_arquivo;

move_uploaded_file($arquivo['tmp_name'], $diretorio.$carimbo ."_".$arquivo['name']);

}

 

A funçao "time" vai puxar a data/hora atual, vamos utilizar este resultado para criar um prefixo que vai ser adicionado no começo do nome do arquivo.

Depois de gravar o arquivo, vamos gerar a minitatura. Nosso objetivo é gerar uma miniatura de 300 x 300 pixels.

Antes de gerar a miniatura, precisamos identificar o tipo de arquivo, para isso precisamos abrir o arquivo que foi enviado e vamos obter o MIME type do arquivo utilizando as funções "getimagesize" e "image_type_to_mime_type".

De acordo com o tipo de arquivo, a função para gerar a miniatura é diferente.

Para arquivos do tipo JPEG, utilizamos a função "imagejpeg". Se o arquivo for do tipo PNG, utilizamos a função imagepng. Por último, se o arquivo for GIF, utlizamos a funçãoimagegif;

if ($nome_arquivo != ""){

if (!file_exists('nome_da_pasta_de_arquivos/'.$nome_arquivo)) {

$diretorio = "nome_da_pasta_de_arquivos/"; 

$caminho=$diretorio.$nome_arquivo;

$caminho_thumb='nome_da_pasta_de_arquivos/thumb_'.$nome_arquivo;

list($width, $height, $type) = getimagesize($caminho);

$tipo_imagem = image_type_to_mime_type ($type);

$new_width = 300;

$new_height = 300;

$image_p = imagecreatetruecolor($new_width, $new_height);

if ($tipo_imagem == 'image/jpeg'){

$image = imagecreatefromjpeg($caminho);

imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

imagejpeg($image_p, $caminho_thumb, 70);

}

if ($tipo_imagem == 'image/png'){

$image = imagecreatefrompng($caminho);

imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

imagepng($image_p, $caminho_thumb, 0);

}

if ($tipo_imagem == 'image/gif'){

$image = imagecreatefromgif($caminho);

imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

imagegif($image_p, $caminho_thumb);

}

imagedestroy($image_p);

}

}

 

O resultado do código acima é gerar um novo arquivo com as dimensões de 300 x 300, preservando o arquivo original. O novo arquivo vai ser gravado na mesma pasta da imagem original, com o prefixo "thumb_" no nome.

Veja outros conteúdos que podem ser de seu interesse