Ir para conteúdo
Fórum Script Brasil
  • 0

Redimensionar Imagens (PhP)


Danilo Reis

Pergunta

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

1.jpg

IMAGEM QUE A FUNÇÃO RETORNA

1x.jpg

IMAGEM QUE PRECISO

1xx.jpg

Alguém tem alguma idéia de como corrigir isso?

Obrigado

Editado por Danilo Reis
Link 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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...