$OBImagem = new OBImagem();
$OBImagem->redimensiona_fixo('./foto1.jpg','./miniatura/foto1.jpg',203,99,100);
O problema é:
Essa função ao redimensionar, quando é necessário cortar a imagem, ele corta parte do topo da imagem, e parte do rodapé da imagem, ou seja ele redimensiona e corta deixando mais a parte central da imagem. Eu preciso que a função redimensione sem cortar o topo, cortando apenas a parte inferior da imagem se necessário. Mas não estou conseguindo arrumar a função.
Pergunta
Danilo Reis
Bom dia à todos..
Pessoal enfrento o seguinte problema.
Tenho um código em PhP, criado por Felipe Oliveira, que faz o seguinte.
Pega a imagem real, e redimensiona para o tamanho especificado, cortando a imagem caso necessário.
Segue o código abaixo:
class OBImagem { function redimensiona_fixo($origem,$destino,$maxlargura,$maxaltura,$qualidade=80) { if(!strstr($origem,"http") && !file_exists($origem)) echo("Arquivo de origem da imagem inexistente"); return false; } $ext = strtolower(end(explode('.', $origem))); if($ext == "jpg" || $ext == "jpeg") { $img_origem = @imagecreatefromjpeg($origem); } elseif ($ext == "gif") { $img_origem = @imagecreatefromgif($origem); } elseif ($ext == "png") { $img_origem = @imagecreatefrompng($origem); } if(!$img_origem) { echo("Erro ao carregar a imagem, talvez formato não suportado"); return false; } $maxAltura = 20; do { $alt_origem = imagesy($img_origem); $lar_origem = imagesx($img_origem); $escala = min($maxAltura/$alt_origem, $maxAltura/$lar_origem); $alt_destino = floor($escala*$alt_origem); $lar_destino = floor($escala*$lar_origem); $maxAltura = $maxAltura+2; }while($alt_destino<=$maxaltura or $lar_destino<=$maxlargura); $alt = ceil((((50*$alt_destino)/100))-ceil($maxaltura/2)); $lar = ceil((((50*$lar_destino)/100))-ceil($maxlargura/2)); // Cria imagem de destino $img_destino = imagecreatetruecolor($maxlargura,$maxaltura); // Redimensiona imagecopyresampled($img_destino, $img_origem, -$lar, -$alt, 0, 0, $lar_destino, $alt_destino, $lar_origem, $alt_origem); imagedestroy($img_origem); $ext = strtolower(end(explode('.', $destino))); if($ext == "jpg" || $ext == "jpeg") { imagejpeg($img_destino,$destino,$qualidade); return true; } elseif ($ext == "gif") { imagepng($img_destino,$destino); return true; } elseif ($ext == "png") { imagepng($img_destino,$destino); return true; } else { echo("Formato de destino não suportado"); return false; } } }Chama a função pelo seguinte código:$OBImagem = new OBImagem(); $OBImagem->redimensiona_fixo('./foto1.jpg','./miniatura/foto1.jpg',203,99,100);O problema é:
Essa função ao redimensionar, quando é necessário cortar a imagem, ele corta parte do topo da imagem, e parte do rodapé da imagem, ou seja ele redimensiona e corta deixando mais a parte central da imagem. Eu preciso que a função redimensione sem cortar o topo, cortando apenas a parte inferior da imagem se necessário. Mas não estou conseguindo arrumar a função.
Abaixo umas imagens ilustrando o que preciso:
IMAGEM REAL
IMAGEM QUE A FUNÇÃO RETORNA
IMAGEM QUE PRECISO
Alguém tem alguma idéia de como corrigir isso?
Obrigado
Editado por Danilo ReisLink para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.