Produtos

25 jun 2010 01h38

Largura, altura de imagens com php (max-width, max-height)

Depois de um tempo sem atualizações, venho traz uma função que me ajuda bastante e considero muito útil.

Eu sempre usava e implementava em imagens o max-width e max-height com CSS, isso já resolvia alguns problemas, porém como já sabemos o ie6 não reconhece essa propriedade de forma natural, para funcionar tem que usar gambiarras com javascript no css.

Claro que o ie6 está ultrapassado e tudo mais, porém as estatísticas mostram que o uso do mesmo ainda é grande, infelizmente para a tristeza de nós desenvolvedores, há muito tempo pensei em abandonar definitivamente projetos para ie6, mas quando vejo o layout todo quebrado no infeliz do navegador, vou sempre consertar.

Mas vamos a função que é bastante útil para manipular largura e altura de imagens. Além de resolver a questão de compatibilidade essa dica tem vantagens na questão de SEO e com CSS desabilitado, já que informamos a largura e altura na tag img com os atributos padrão.

    //---------------------------------------------------------------------------
// FUNCAO PARA TRABALHAR COM IMAGEM
//---------------------------------------------------------------------------
function img($img, $max_x, $max_y){
$tipo = getimagesize($img);
list($width, $height) = $tipo;
$original_x = $width;
$original_y = $height;
// Se a imagem original for menor que o tamanho configurado, matenho as dimensões originais
if (($original_x > $max_x) && ($original_y < $max_y)){
$porcentagem = (100 * $max_x) / $original_x;
$tamanho_x = $original_x * ($porcentagem / 100);
$tamanho_y = $original_y * ($porcentagem / 100);
} elseif (($original_x <= $max_x) && ($original_y >= $max_y)){
$porcentagem = (100 * $max_y) / $original_y;
$tamanho_x = $original_x * ($porcentagem / 100);
$tamanho_y = $original_y * ($porcentagem / 100);
} elseif (($original_x > $max_x) && ($original_y >= $max_y)){
$porcentagem = (100 * $max_y) / $original_y;
$tamanho_x = $original_x * ($porcentagem / 100);
$tamanho_y = $original_y * ($porcentagem / 100);
} else {
$tamanho_x = $original_x;
$tamanho_y = $original_y;
}
if (($tamanho_x > $max_y) && ($tamanho_y <= $max_y)){
$porcentagem = (100 * $max_x) / $original_x;
$tamanho_x = $original_x * ($porcentagem / 100);
$tamanho_y = $original_y * ($porcentagem / 100);
}
return array((int)($tamanho_x), (int)($tamanho_y));
}


Uso:
    $iwh = img('mti.png', 140, 120);
<img src="mti.png" width="<?=$iwh[0]?>" width="<?=$iwh[1]?>" />


Explicação breve: esta função ler os atributos de largura e altura original da imagem e depois faz verificações para saber se vai redimensionar ou manter ela no tamanho original.
Script em anexo, dúvidas e sugestões favor deixar abaixo.

Basicamente esta é a mesma função que uso para fazer o envio de imagens, falta apenas a parte do envio. Depois trago pra vocês.

Atenção: esta função funciona com imagens remotas, entretanto o acesso é bastante lento, por isso seu uso é recomendado para imagens locais no hosting.

© MNDTI - Tecnologia e Informação. Todos Direitos Reservados. Política de privacidade.

Rua São Vicente, 109 LJ A - Centro | CEP: 38600-000 - Paracatu, MG | Telefone: (38) 8802-9176