ENVIAR, REDIMENCIONAR, SALVAR CAMINHO NA BASE DE IMAGENS E MONTAR GALERIA DE IMAGENS

segunda-feira, 9 de junho de 2008 | Marcadores: , , | |

Para enviarmos uma imagem para o servidor de seu site o primeiro passo é criar um formulário de upload de arquivos.

FUNÇAO QUE SERÁ USADA NO PROCESSO
Salve esta página como funcao.php

<?
//ESTA FUNÇÃO REDIMENCIONA A IMAGEM PROPORCIONALMENTE
function gera_thumbnail( $diretorio, $imagem, $x, $y, $arg ) {
$extensao = strtolower(end(explode('.', $imagem)));

//Define o nome do novo thumbnail
$thumbnail = explode('.', $imagem);
$thumbnail = $diretorio."/".$thumbnail[0]."".$arg.".".$extensao;

$imagem = $diretorio."/".$imagem;

//Cria uma nova imagem da imagem original
if ( $extensao == 'jpg' || $extensao == 'jpeg' ):
$img_origem = imagecreatefromjpeg($imagem);
elseif ( $extensao == 'png' ):
$img_origem = imagecreatefrompng($imagem);
elseif ( $extensao == 'gif' ):
$img_origem = imagecreatefromgif($imagem);
endif;

//Recupera as dimensoes da imagem original
$origem_x = imagesx($img_origem); //Largura
$origem_y = imagesy($img_origem); //Altura
//PROPORÇÃO DAS IMAGENS
$percent = 0.5;
$x = $origem_x * $percent;
$y = $origem_y * $percent;

$img_final = imagecreatetruecolor($x, $y);

// Resize
imagecopyresized($img_final, $img_origem, 0, 0, 0, 0, $x, $y, $origem_x, $origem_y);

//Salvo o novo thumbnail
if ( $extensao == 'jpg' || $extensao == 'jpeg' ):
imagejpeg($img_final, $thumbnail, 100);
elseif ($extensao == 'png'):
imagepng($img_final, $thumbnail, 100);
elseif ($extensao == 'gif'):
imagegif($img_final, $thumbnail, 100);
endif;

//Destruo as imagens que foram utilizadas
imagedestroy($img_origem);
imagedestroy($img_final);
}

//ESTA FUNÇÃO REDIMENCIONA AS IMAGENS PARA UM TAMANHO EXATO PREENCHENDO OS ESPAÇOS COM UMA COR BRANCA
function gera_thumbnail_tn( $diretorio, $imagem, $x, $y, $arg ) {
$extensao = strtolower(end(explode('.', $imagem)));

//Define o nome do novo thumbnail
$thumbnail = explode('.', $imagem);
$thumbnail = $diretorio."/".$thumbnail[0]."".$arg.".".$extensao;

$imagem = $diretorio."/".$imagem;

//Cria uma nova imagem da imagem original
if ( $extensao == 'jpg' || $extensao == 'jpeg' ):
$img_origem = imagecreatefromjpeg($imagem);
elseif ( $extensao == 'png' ):
$img_origem = imagecreatefrompng($imagem);
elseif ( $extensao == 'gif' ):
$img_origem = imagecreatefromgif($imagem);
endif;

//Recupera as dimensoes da imagem original
$origem_x = imagesx($img_origem); //Largura
$origem_y = imagesy($img_origem); //Altura

//Se a imagem nao for proporcional ao thumbnail que se vai gerar
//Pega a maior face e calcula a outra face proporcional a imagem original
if ( $origem_x > $origem_y ): // Se a largura for maior que a altura
$final_x = $x; //A largura sera a do thumbnail
$final_y = floor( $x * $origem_y / $origem_x ); //Calculo a altura proporcional
$f_x = 0; //Posiciono a imagem no x = 0
$f_y = 0;/*round( ( $y / 2 ) - ( $final_y / 2 ) ); *///Centralizo a imagem no vertice y
else: //Se a altura for maior ou igual a largura
$final_y = $y; //A altura sera a do thumbnail
$final_x = floor( $y * $origem_x / $origem_y ); //Calculo a largura proporcional
$f_y = 0; //Posiciono a imagem no x = 0
$f_x = round( ( $x / 2 ) - ( $final_x / 2 ) ); //Centralizo a imagem no vertice x
endif;

//Gero a nova imagem do thumbnail do tamanho $x X $y
$img_final = imagecreatetruecolor($x,$y);
//define o fundo
$fundob = imagecolorallocate($img_final, 255,255,255);
//preenche o fundo da imagem
imagefill($img_final, 0, 0, $fundob);


//Copio a imagem original para a imagem do thumbnail utilizando os dados que foram calculados
imagecopyresized($img_final, $img_origem, $f_x, $f_y, 0, 0, $final_x, $final_y, $origem_x, $origem_y);

//Salvo o novo thumbnail
if ( $extensao == 'jpg' || $extensao == 'jpeg' ):
imagejpeg($img_final, $thumbnail, 100);
elseif ($extensao == 'png'):
imagepng($img_final, $thumbnail, 100);
elseif ($extensao == 'gif'):
imagegif($img_final, $thumbnail, 100);
endif;

//Destruo as imagens que foram utilizadas
imagedestroy($img_origem);
imagedestroy($img_final);
}
?>

CRIANDO A PÁGINA DE ENVIO DO ARQUIVO
Salve esta pagina como envio_imagem.htm
Abaixo o código:

<html>

<head>
<title>Envio de Imagens</title>
</head>

<body>
<form name="imagem" method="post" enctype="multipart/form-data" action="envia.php">
<p><input type="file" name="imagem"><br><input type="submit" name="formbutton1" value="Enviar Imagem"> </p>
</form>
</body>

</html>

CRIANDO A BASE DE DADOS
Vamos criar uma base chamada imagem.

Agora criamos uma tabela chamada galeria.

CREATE TABLE `galeria` (
`id` int(11) NOT NULL auto_increment,
`caminho` varchar(200) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

ENVIANDO AS IMAGENS

Agora vamos fazer a página que faz todo o processo de envio, redimensionamento e que salvará o caminho da imagem em uma base.

Salve esta pagina como envia.php

Vamos ao código:

<?
//CHAMAMOS A FUNÇÃO CRIADA ACIMA
require("funcao.php");

//CONECÇÃO COM O BANCO DE DADOS
$con = mysql_connect("localhost","root","") or die("ERRO NA CONEXÃO");
$db = mysql_select_db("imagem",$con) or die("ERRO NA SELEÇÃO DA BASE DE DADOS");

//RECEBE AS IMAGENS
$ball = $_FILES['imagem']['name'];

//VERIFICA SE É JPG
//DEIXO A EXTENÇÃO PARA MINÚSCULO
$extensao = strtolower(end(explode('.', $ball)));

// SE A EXTENÇÃO É JPG CONTINUA, VOCÊ PODE VERIFICAR OUTROS TIPOS DE IMAGEM TAMBÉM É SÓ REPETIR O IF
if ($extensao=="jpg")
{

//CAMINHO COM O NOME DA IMAGEM E LOCAL (Este é o caminho onde as imagens serão salvas)
$caminho1 = "imgs/".$ball;

//MOVE A IMAGEM
move_uploaded_file($_FILES['imagem']['tmp_name'],$caminho1);

//PEGA O TAMANHO DA IMAGEM
$origem_x = getimagesize("imgs/".$ball."");


// SE A LARGURA FOR MAIOR QUE 600 (altera para o tamanho que que desejar)

if ($origem_x[0]>600)
{
//REDIMENSIONA A IMAGEM
$diretorio = "imgs";
$imagem = $ball;
$x = 600;
$y = 600;
$arg = "";
$acao = "grande";

gera_thumbnail($diretorio, $imagem, $x, $y, $arg);
}
//GERA O THUMBNAIL
$diretorio = "imgs";
$imagem = $ball;
$x = 100;
$y = 100;
$arg = "_tn";
$acao = "pequeno";

gera_thumbnail_tn($diretorio, $imagem, $x, $y, $arg);

//PESQUISA NA BASE O ULTIMO NOME DA IMAGEM
$sql_n = "SELECT MAX(id) FROM galeria";
$cons_n = mysql_query($sql_n);
$num = mysql_fetch_array($cons_n);
$numero = $num[0];
$numero1 = $numero+1;

//RENOMEIA AS IMAGEMS
rename("imgs/".$ball."","imgs/".$numero1.".jpg");
$nome_t = explode('.jpg', $ball);
$nome_t2 = $nome_t[0];
rename("imgs/".$nome_t2."_tn.jpg","imgs/".$numero1."_tn.jpg");

//INSERE O CAMINHO NA BASE
$caminho_novo = "imgs/".$numero1.".jpg";
$sql = "INSERT into galeria VALUES('', '$caminho_novo')";
mysql_query($sql);

echo "IMAGEM INCLUÍDA COM SUCESSO";

}
else
{
//SE A IMAGEM NÃO FOR JPG
echo "IMAGEM NÃO INCLUIDA PORQUE A IMAGEM NÃO CORRESPONDE AO FORMATO ACEITO! (.jpg)";
}
?>

PÁGINA PARA VISUALIZAR A GALERIA
Salve como galeria.php

<?
//CONECÇÃO COM O BANCO DE DADOS
$con = mysql_connect("localhost","root","") or die("ERRO NA CONEXÃO");
$db = mysql_select_db("imagem",$con) or die("ERRO NA SELEÇÃO DA BASE DE DADOS");

?>
<html>
<head>
<title>Minha Galeria<title>
</head>
<body>
<table>
<?
//MONTAMOS A GALERIA
$colunas="5";//ALTERE AQUI PARA A QUANTIDADE DE COLUNAS PRETENDIDAS
$cont="1";

//CONSULTA AS IMAGENS
$sql = "SELECT caminho FROM galeria";
$cons = mysql_query($sql);
while($valor = mysql_fetch_array($cons))
{
if($cont==1){
?>
<tr>
<?
}
?> <td>
<img src="imgs/<? echo $valor["caminho"]; ?>">
</td>
<?
if($cont==$colunas){
echo "</tr>";

$cont=0;
}
$cont=$cont+1;
}

if(!$cont==$colunas){
echo "</tr></table>";
} else {
?> </tr>

</table>
</body>
</html>
<?
}
?>

PRONTINHO!
EM UM PRÓXIMO POST ENSINAREI A FAZER PAGINAÇÃO NESTA GALERIA, FAZER VÁRIAS GALERIAS E TAMBÉM A INCLUIR COMENTÁRIOS NAS FOTOS!

0 comentários: