Hoje, dando uma olhada na net, achei em um fórum uma dúvida interessante, mas muito simples. Acho que muitos aqui devem saber de cór a solução, mas a galera iniciante sempre passa batida, muitas vezes, é verdade, por preguiça de pensar. Sem mais delongas, vamos ao problema.

Calcular o redimensionamento de uma imagem mantendo as proporções da original?

É bom deixar claro que não vou mostrar como redimensionar, propriamente falando, apenas vou mostrar o cálculo. O redimensionamento propriamente dito será feito no próximo artigo.

Caso 1
Supondo que tenho uma imagem com proporções 480x640, e quero achar o valor da largura proporcional para uma altura de 300 pixels. Temos

<?
//primeiramente acharemos um fator de redimensionamento,
//dividindo a altura atual (640) pela altura desejada (300)

$fator_redim = 640/300; //resultado: 2,1333 //agora que achei o fator de redimensionamento, vou
//pegar a largura atual (480) e vou dividi-la por $fator_redim

$largura_ideal = 480/$fator_redim;
//Resultado: 225,00
?>

Logo, minha largura ideal, será 225 pixels. Fácil, né?
Agora vamos aprofundar um pouco mais. Vou criar uma função que tem o objetivo de fazer esse cálculo e retornar o valor da largura ideal.
Essa função será útil no nosso próximo tutorial. Vamos à ela.

<?
/* FUNÇÃO REDIMENSIONA
* 29/01/2008
* Autor: José Cláudio Medeiros de Lima
* Objetivo: indicar a altura (ou largura) ideal para o possível
* redimensionamento de uma imagem.
*/
function redimensiona($caminho,$altura="",$largura="")
{
//$caminho é o caminho da imagem. Vamos achar as dimensões
//da imagem automaticamente a partir dele.

//achando as propriedades da imagem
$propriedades = getimagesize[/color]($caminho);

//getimagesize retorna um array contendo várias informações
//sobre aimagem, mas só precisaremos dos dois primeiros.
//O índice ZERO recebe a largura da imagem e o UM a altura

$altura_atual = $propriedades[1];
$largura_atual = $propriedades[0];

//Agora vamos fazer algumas verificações: Por exemplo, não
//faz sentido informar a largura e a altura nos parâmetros
//da função, só um deles é necessário. Então vamos dizer
//que a altura é o mais importante, e se forem informadas as
//duas, só a altura será levada em consideração
[color="#0000ff"] if(isset($altura))
{
return $largura_atual/($altura_atual/$altura);
}
elseif(!isset($altura) && isset($largura))
{
return $altura_atual/($largura_atual/$largura);
}

}
?>

Você gostou? Comente no fórum!

Mais recentes em PHP

Classe para controle de banco de dados.
Por Pinguim - Classe para facilitar a manipulação de banco de dados...
Mail injection em php
Por Micox - What??!?...
Zend frameworks - o inicio
Por LeandroBarral - Primeiros passos.....
Classe de conexão com mysql
Por Carutcho - Pô esses dias passei aqui no forum de php pra dar uma...
Decimal para hexadecimal
Por dragun - Exemplo de função recursiva...

Ver mais Artigos de PHP.

Ver e retirar outras dúvidas no fórum Webly.

Alguns Direitos Reservados | RSS | O Fórum

Webly Portal e Fóruns - Internet + Humana | Design by ArthurHenrique.com