GD2 – Criando Thumb para Imagens dinâmicamente
abr 21
Biblioteca GD2 Biblioteca GD2, biblioteca php, criando thumb, gd2, PHP, trabalhando imagens dinâmicamente 3 Comments
Nesse artigo, vamos trabalhar com a biblioteca GD2 do PHP, no qual conseguimos manipular imagens dinâmicamente.
Primeiramente para trabalhar com a GD2, você precisa habilitar antes:
- Abra o arquivo de configuração do PHP em um editor de texto, o arquivo se chama “php.ini“. Depois procure pela linha:
;extension=php_gd2.dll
Agora, tire “;” (ponto e virgula) da frente, a linha deve ficar assim:
extension=php_gd2.dll
Salva o arquivo “php.ini” e reinicie seu php, para as nova configuração ser aplicada.
“Esse (;) ponto e virgula, serve para comentar a linha, por isso você precisa tirar, para descomentar a linha e ativar a biblioteca. Caso essa linha não tenha o (;) , isso quer dizer que a sua biblioteca já estava habilidade“.
Agora com a GD2 ativa em seu ambiente virtual, podemos trabalhar dinâmicamente as imagens.
O exemplo a seguir mostra como criar dinâmicamente uma Thumb (miniatura) de uma determinada imagem.
Classe: Class_Image.php
<?php
require_once "bmp_1.php";//SUPORTE A BMP
//CLASSE IMAGE
class Image{
function Criar_thumb($path,$width) {
//VERIFICA SE EXISTE $PATH
if (!file_exists($path)) return THUMB_ERROR_IMAGE_NOT_FOUND;
//DEFINE QUAL É O TIPO
ereg ("(.*)\.([^.]+)$", $path, $partes);
define("IMAGETYPE_JPEG", 1);
define("IMAGETYPE_PNG", 2);
define("IMAGETYPE_GIF", 3);
define("IMAGETYPE_BMP", 4);
define("IMAGETYPE_UNKNOWN", -1);
if ($partes[2] == "jpg" || $partes[2] == "JPG") $type = IMAGETYPE_JPEG;
elseif ($partes[2] == "jpeg"|| $partes[2] == "JPEG") $type = IMAGETYPE_JPEG;
elseif ($partes[2] == "png" || $partes[2] == "PNG") $type = IMAGETYPE_PNG;
elseif ($partes[2] == "gif" || $partes[2] == "GIF") $type = IMAGETYPE_GIF;
elseif ($partes[2] == "bmp" || $partes[2] == "BMP") $type = IMAGETYPE_BMP;
else return THUMB_ERROR_INVALID_IMAGE_TYPE;
//CRIA A IMAGEM NA MEMORIA
switch ($type) {
case IMAGETYPE_JPEG:
$img_origem = @imagecreatefromjpeg($path);
break;
case IMAGETYPE_PNG:
$img_origem = @imagecreatefrompng($path);
break;
case IMAGETYPE_GIF:
$img_origem = @imagecreatefromgif($path);
break;
case IMAGETYPE_BMP:
$img_origem = imagecreatefrombmp($path);//GD NAO TEM SUPORTE ENTÃO USAMOS A FUNCAO;
break;
default:
return THUMB_ERROR_INVALID_IMAGE_TYPE;
}
//PEGA DIMENSAO ORIGINAL E TIRA 80%
if($img_origem){
$origem_altura = ImagesY($img_origem);
$origem_largura = ImagesX($img_origem);
$aprox=$width;
$x = $origem_largura;
$y = $origem_altura;
if($x >= $y){
if($x > $aprox)
{
$x1= (int)($x * ($aprox/$x));
$y1= (int)($y * ($aprox/$x));
} else {
$x1 = $x;
$y1 = $y;
}
} else {
if($y > $aprox){
$x1 = (int)($x * ($aprox/$y));
$y1 = (int)($y * ($aprox/$y));
} else {
$x1 = $x;
$y1 = $y;
}
}
$x = $x1;
$y = $y1;
//CRIA A NOVA IMAGEM
$img_final = imagecreatetruecolor($x, $y);
imagecopyresized($img_final, $img_origem, 0,0,0,0, $x+1, $y+1, $origem_largura, $origem_altura);
} else { // Imagem "Processando..."
$img_final = imagecreate(100, 60);
$bg = imagecolorallocate($img_final, 255, 255, 255);
$textcolor = imagecolorallocate($img_final, 0, 0, 255);
imagestring($img_final, 2, 2, 20, "Processando...", $textcolor);
}
$img_thumb = $partes[1]."_th_.".$partes[2];
//GRAVA A IMAGEM Q FOI CRIADA
switch ($type) {
case IMAGETYPE_JPEG:
imagejpeg($img_final, $img_thumb, 100);
break;
case IMAGETYPE_PNG:
imagepng($img_final, $img_thumb);
break;
case IMAGETYPE_GIF:
imagegif($img_final, $img_thumb, 100);
break;
case IMAGETYPE_BMP:
imagejpeg($img_final, $img_thumb);
break;
}
//DEPOIS Q GRAVA, DELETA A IMAGEM DA MEMORIA
if ($img_origem) @imagedestroy($img_origem);
if ($img_final) @imagedestroy($img_final);
return;
}
}
?>
Para instânciar e executar a classe, você pode fazer da seguinte forma:
executa.php
<?php
require_once "Class_Image.php";
$image = new Image();
$image->Criar_thumb("imagem.jpg",100);
?>
“O primeiro parametro, é a imagem em sí, e o segundo é o valor em pixel que a thumb vai ter. (Nesse caso ela terá aproximadamente 100px de largura)“.
Observação importante:
A GD2 não suporta imagens no formato BMP, por isso vamos usar um pacote “bmp_1.php”. (você vai perceber que estamos importando esse package na linha 3 da Class_Image.php).
Pode pegar esse package aqui. bmp_1.php
Veja o exemplo, estude a classe, e qualquer dúvida comente.
Valeu.
RSS
Blog Alex (Design / Artes / Cultura)
Blog Leonardo (Infra / Redes / Segurança)
Caos Developers