class Imagem { function salvaImagem($origem = NULL, $destino = NULL) { if ($origem != NULL and $destino != NULL) { return copy($origem, $destino); } } // ***** // REDIMENCIONAR FOTO // function redimensiona($urlorigem, $urldestino, $largura, $altura = NULL) { // ***** // URL DO ARQUIVO ORIGINAL // $url = $urlorigem; // ***** // SEPARA NOME E EXTENSAO // $extencao = pathinfo($urldestino, PATHINFO_EXTENSION); $mini = $urldestino; // ***** // CRIA IMAGEM CONFORME EXTENSAO // switch (strtolower($extencao)) { case 'jpg': $imagemOrigem = imagecreatefromjpeg($url);break; case 'pjpeg': $imagemOrigem = imagecreatefromjpeg($url);break; case 'jpeg': $imagemOrigem = imagecreatefromjpeg($url);break; case 'gif': $imagemOrigem = imagecreatefromgif($url);break; case 'png': $imagemOrigem = imagecreatefrompng($url);break; default: return false; } // ***** // GUARDA DIMENSSOES DA IMAGEM // $origemX = ImagesX($imagemOrigem); $origemY = ImagesY($imagemOrigem); // ***** // LARGURA DA FOTO // $miniX = $largura; // ***** // SE O TAMANHO ORIGINAL DA IMGAME FOR INFERIOR AO NOVO TAMANHO ELA NÃO SERA REDIMENSIONADA // if ($origemX <= $miniX) { $miniX = $origemX; $miniY = $origemY; } else { // ***** // CALCULA A ALTURA DA FOTO CONFORME LARGURA // $percentual = $miniX * 100/$origemX; $miniX = round($origemX * $percentual/100, 0); $miniY = round($origemY * $percentual/100, 0); } if ($altura != NULL) { // ***** // CONSITE ALTURA DA FOTO // if ($miniY > $altura) { $percentual = $altura * 100/$origemY; $miniX = round($origemX * $percentual/100, 0); $miniY = round($origemY * $percentual/100, 0); } } // ***** // CRIA IMAGEM FOTO // $imagemDestino = ImageCreateTrueColor($miniX, $miniY); // mantém transparência if (strtolower($extencao) == 'png') { imageAlphaBlending($imagemDestino, false); imageSaveAlpha($imagemDestino, true); } // ***** // copia imagem original // ImageCopyResampled($imagemDestino, $imagemOrigem, 0, 0, 0, 0, $miniX + 1, $miniY + 1, $origemX, $origemY); // ***** // SALVA O ARQUIVO // switch ($extencao) { case 'jpg': ImageJPEG($imagemDestino, $mini, 100);break; case 'JPG': ImageJPEG($imagemDestino, $mini, 100);break; case 'pjpeg': ImageJPEG($imagemDestino, $mini, 100);break; case 'jpeg': ImageJPEG($imagemDestino, $mini, 100);break; case 'gif': ImageGIF($imagemDestino, $mini);break; case 'png': ImagePNG($imagemDestino, $mini);break; } // ***** // LIBERA MEMÓRIA // ImageDestroy($imagemOrigem); ImageDestroy($imagemDestino); return true; } // Corta imagem function crop($origem, $destino, $wCrop, $hCrop) { $filename = ($origem); $extencao = pathinfo($origem, PATHINFO_EXTENSION); $newFilename = $destino; $cropWidth = $wCrop; $cropHeight = $hCrop; list($fileWidth, $fileHeight) = getimagesize($filename); $percentWidth = ($cropWidth * 100 / $fileWidth); $newHeight1 = $fileHeight * $percentWidth / 100; $percentHeight = ($cropHeight * 100 / $fileHeight); $newWidth2 = $fileWidth * $percentHeight / 100; if ($newHeight1 < $cropHeight) { $newWidth = (int)$newWidth2; $newHeight = $cropHeight; } else { $newWidth = $cropWidth; $newHeight = (int)$newHeight1; } if (self::novaImagem($filename, $newFilename, $newWidth, $newHeight)) { $wCenter = (int)($newWidth/2); $hCenter = (int)($newHeight/2); $leftCrop = $wCenter - (int)($cropWidth/2); $topCrop = $hCenter - (int)($cropHeight/2); $imageFinal = imagecreatetruecolor($cropWidth, $cropHeight); $imageNova = NULL; // mantém transparência if (strtolower($extencao) == 'png') { imageAlphaBlending($imageFinal, false); imageSaveAlpha($imageFinal, true); } else { // fundo branco imagecolorallocate($imageFinal, 255, 255, 255); } switch (strtolower($extencao)) { case 'jpg': $imageNova = imagecreatefromjpeg($newFilename);break; case 'pjpeg': $imageNova = imagecreatefromjpeg($newFilename);break; case 'jpeg': $imageNova = imagecreatefromjpeg($newFilename);break; case 'gif': $imageNova = imagecreatefromgif($newFilename);break; case 'png': $imageNova = imagecreatefrompng($newFilename);break; default: return false; } imagecopy($imageFinal, $imageNova, 0, 0, $leftCrop, $topCrop, $cropWidth, $cropHeight); $r = false; switch ($extencao) { case 'jpg': $r = ImageJPEG($imageFinal, $newFilename, 100);break; case 'JPG': $r = ImageJPEG($imageFinal, $newFilename, 100);break; case 'pjpeg': $r = ImageJPEG($imageFinal, $newFilename, 100);break; case 'jpeg': $r = ImageJPEG($imageFinal, $newFilename, 100);break; case 'gif': $r = ImageGIF($imageFinal, $newFilename);break; case 'png': $r = ImagePNG($imageFinal, $newFilename);break; } ImageDestroy($imageFinal); return $r; } else { return false; } } function novaImagem($urlorigem, $urldestino, $largura, $altura = NULL) { // url original $url = $urlorigem; // recupera extensão $extencao = pathinfo($urldestino, PATHINFO_EXTENSION); $mini = $urldestino; // cria uma imagem baseadona extensão switch (strtolower($extencao)) { case 'jpg': $imagemOrigem = imagecreatefromjpeg($url);break; case 'pjpeg': $imagemOrigem = imagecreatefromjpeg($url);break; case 'jpeg': $imagemOrigem = imagecreatefromjpeg($url);break; case 'gif': $imagemOrigem = imagecreatefromgif($url);break; case 'png': $imagemOrigem = imagecreatefrompng($url);break; default: return false; } // recupera as dimensões originais $origemX = ImagesX($imagemOrigem); $origemY = ImagesY($imagemOrigem); // calcula o percentual de redução baseando-se na nova largura $percentual = $largura * 100/$origemX; $aux = ceil($origemY * $percentual/100); // se existir uma altura de redução e a nova altura for inferior a esta um novo cálculo é feito if ($altura != NULL) { if ($aux < $altura) { // calcula-se o percentual de redução baseando-se na nova latura $percentual = $altura * 100/$origemY; $largura = ceil($origemX * $percentual/100); } } else { $altura = $aux; } // cria nova imagem $imagemDestino = ImageCreateTrueColor($largura, $altura); // mantém transparência if (strtolower($extencao) == 'png') { imageAlphaBlending($imagemDestino, false); imageSaveAlpha($imagemDestino, true); } // copia imagem de origem para imagem de destino ImageCopyResampled($imagemDestino, $imagemOrigem, 0, 0, 0, 0, $largura + 1, $altura + 1, $origemX, $origemY); // salva a imagem $r = false; switch ($extencao) { case 'jpg': $r = ImageJPEG($imagemDestino, $mini, 100);break; case 'JPG': $r = ImageJPEG($imagemDestino, $mini, 100);break; case 'pjpeg': $r = ImageJPEG($imagemDestino, $mini, 100);break; case 'jpeg': $r = ImageJPEG($imagemDestino, $mini, 100);break; case 'gif': $r = ImageGIF($imagemDestino, $mini);break; case 'png': $r = ImagePNG($imagemDestino, $mini);break; } // remove imagens da memória ImageDestroy($imagemOrigem); ImageDestroy($imagemDestino); return $r; } function tipoImagem($type) { $arquivoTipo = ''; if ($type == "image/gif"){ $arquivoTipo = "gif"; } else if ($type == "image/jpg"){ $arquivoTipo = "jpeg"; } else if ($type == "image/jpeg"){ $arquivoTipo = "jpeg"; } else if ($type == "image/png"){ $arquivoTipo = "png"; } return $arquivoTipo; } // Aplica a rotação "$angulo" em "$origem" e salva em "$destino" function girarImagem($origem, $destino, $angulo) { // recupera extensão $extencao = strtolower(pathinfo($origem, PATHINFO_EXTENSION)); $imagemOrigem = new GdImage; // cria uma imagem baseadona extensão switch (strtolower($extencao)) { case 'jpg': $imagemOrigem = imagecreatefromjpeg($origem) or die('Erro ao abrir '.$origem);;break; case 'pjpeg': $imagemOrigem = imagecreatefromjpeg($origem) or die('Erro ao abrir '.$origem);;break; case 'jpeg': $imagemOrigem = imagecreatefromjpeg($origem) or die('Erro ao abrir '.$origem);;break; case 'gif': $imagemOrigem = imagecreatefromgif($origem) or die('Erro ao abrir '.$origem);;break; case 'png': $imagemOrigem = imagecreatefrompng($origem) or die('Erro ao abrir '.$origem);;break; default: return false; } imagealphablending($imagemOrigem, false); imagesavealpha($imagemOrigem, true); $rotation = new GdImage; if ($extencao == 'png') { $rotation = imagerotate($imagemOrigem, $angulo, imageColorAllocateAlpha($imagemOrigem, 0, 0, 0, 127)) or die('Erro ao girar imagem '. $imagemOrigem); } else { $rotation = imagerotate($imagemOrigem, $angulo, imageColorAllocateAlpha($imagemOrigem, 255, 255, 255, 0)) or die('Erro ao girar imagem '. $imagemOrigem); } imagealphablending($rotation, false); imagesavealpha($rotation, true); switch ($extencao) { case 'jpg': $r = ImageJPEG($rotation, $destino, 100);break; case 'JPG': $r = ImageJPEG($rotation, $destino, 100);break; case 'pjpeg': $r = ImageJPEG($rotation, $destino, 100);break; case 'jpeg': $r = ImageJPEG($rotation, $destino, 100);break; case 'gif': $r = ImageGIF($rotation, $destino);break; case 'png': $r = ImagePNG($rotation, $destino);break; } imagedestroy($imagemOrigem); imagedestroy($rotation); list($width, $height) = getimagesize($origem); self::redimensiona($destino, $destino, $width, $height); } }