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 action="gravar.php" enctype="multipart/form-data" method="POST" name="form1">
<label>Foto</label><input name="foto" type="file" />
<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.