Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Dan Almeida

Função redimensionar imagem

Recommended Posts

Salve!!!

 

Pessoal, tenho o seguinte códigoif(isset($_POST['acao']) && $_POST['acao'] == 'cadastrar'){

$foto = $_FILES['foto'];
if($foto['type'] == 'image/jpeg'){
require("funcao_upload.php");
$name = $id_pic."_"."img.jpg";            
Redimensionar($foto, $name, 312, "images");
}

Que chama a seguinte função:

 

function Redimensionar($imagem, $name, $largura, $pasta){
            $img = imagecreatefromjpeg($imagem['tmp_name']);
            $x   = imagesx($img);
            $y   = imagesy($img);
            $altura = ($largura * $y)/$x;
            $nova = imagecreatetruecolor($largura, $altura);
            imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
            imagejpeg($nova, "$pasta/$name");
            imagedestroy($img);
            imagedestroy($nova);
            return $name;
      }

Ocorre que este código, redimensiona uma largura máxima (ex. 312px):

 

Redimensionar($foto, $name, 312, "images");

Não estou conseguindo alterar a função para que eu utilize um valor de altura e não largura como está hoje.

 

Alguém saberia como fazer esta alteração?

 

Tudo o que tentei dá erro...

 

Vlw!!!

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Redimensionar($foto, $name, 450, "images");
function Redimensionar($imagem, $name, $altura, $pasta){
$img = imagecreatefromjpeg($imagem['tmp_name']);
$x = imagesx($img); $y = imagesy($img);
$altura = ($altura * $x)/$y;
$nova = imagecreatetruecolor($largura, $altura);
imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y); imagejpeg($nova, "$pasta/$name");
imagedestroy($img);
imagedestroy($nova);
return $name;
}
 

 

 

 

 

Tente isso :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade tudo pode ser aproveitado em uma só função.

basta mudar a ordem dos param

 


 

function Redimensionar($pasta, $imagem, $name, $altura = '', $largura= ''){
 $img = imagecreatefromjpeg($imagem['tmp_name']); 
$x = imagesx($img);
 $y = imagesy($img);
if(empty($largura)){
$largura = $y;
}else{
 $largura= ($largura * $y)/$x;
}
if(empty($altura)){
$altura = $x;
}else{
 $altura = ($altura * $x)/$y;
}

 $nova = imagecreatetruecolor($largura, $altura);
 imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
 imagejpeg($nova, "$pasta/$name");
 imagedestroy($img); 
imagedestroy($nova); 
return $name; 
} 

isso deixaria a sua merce, você pode passar só altura ou só largura ou os 2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacsh...

 

O seu código apresenta este erro:

 

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/imovclass/www/imov2/scripts/funcao_upload.php on line 6

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in/home/imovclass/www/imov2/scripts/funcao_upload.php on line 7

Warning: imagejpeg(): supplied argument is not a valid Image resource in/home/imovclass/www/imov2/scripts/funcao_upload.php on line 8

Warning: imagedestroy(): supplied argument is not a valid Image resource in/home/imovclass/www/imov2/scripts/funcao_upload.php on line 10

Vinicius...

 

O seu código não está redimensionando proporcionalmente...

 

Está deformando a imagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você ta chamando?

Vamos ver se consegue me ajudar...

 

Tenho feito tanta coisa que, como iniciante, minha cabeça está fritando e talvez não esteja conseguindo raciocinar adequadamente.

 

A área onde as imagens são exibidas tem medidas 498 px largura x 312 px altura, portanto, a imagem não pode ultrapassar estas medidas.

 

Por exemplo, se for paisagem, não pode ser mais larga que 498 px de largura. Se for retrato, não pode ultrapassar os 312 px de altura.

 

Pelo que tenho notado aqui nos testes, se eu limitar a altura, não terei problemas com a largura.

 

Este código está redimensionando a largura portanto, quando a imagem está em retrato, a largura fica nos 498 px e altura estoura o limite da DIV.

 

O código que tenho, que chama a função é este originalmente:

 

if(isset($_POST['acao']) && $_POST['acao'] == 'cadastrar'){
$foto = $_FILES['foto'];
if($foto['type'] == 'image/jpeg'){
require("funcao_upload.php");
$name = $id_pic."_"."img1.jpg";            
Redimensionar($foto, $name, 312, "images");
}
}

Talvez não esteja sabendo ou conseguindo raciocinar adequadamente para adaptá-lo ao seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você reparou que eu mudei a função?

então você tem que chamar de outro jeito.

 

 


Agora ficou:

function Redimensionar($pasta, $imagem, $name, $altura = '', $largura= '')

Primeiro é o nome da pasta, depois a imagem si, depois o nome, depois a altura e depois a largura

Sendo que deixei a altura e largura opcional, então você pode definir só um ou só outro

 

tente chamar assim

 

 


 

Redimensionar("images", $foto, $name, "", 400);

e veja como vai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você reparou que eu mudei a função?

então você tem que chamar de outro jeito.

 

 


Agora ficou:

function Redimensionar($pasta, $imagem, $name, $altura = '', $largura= '')

Primeiro é o nome da pasta, depois a imagem si, depois o nome, depois a altura e depois a largura

Sendo que deixei a altura e largura opcional, então você pode definir só um ou só outro

 

tente chamar assim

 

 


 

Redimensionar("images", $foto, $name, "", 400);

e veja como vai

 

Vamos lá.

 

Sua função adaptada para minha necessidade:

 

 

 

function Redimensionar1($pasta, $imagem, $name1, $altura = '', $largura= ''){
 $img = imagecreatefromjpeg($imagem['tmp_name']); 
$x = imagesx($img);
$y = imagesy($img);
if(empty($largura)){
$largura = $y;
}else{
 $largura = ($largura * $y)/$x;
}
if(empty($altura)){
$altura = $x;
}else{
 $altura = ($altura * $x)/$y;
}


 $nova = imagecreatetruecolor($largura, $altura);
 imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
 imagejpeg($nova, "$pasta/$name1");
 imagedestroy($img); 
imagedestroy($nova); 
return $name1; 
}

 

O código que chama a função adaptado para minha necessidade:

 

$foto1 = $_FILES['foto1'];
if($foto1['type'] == 'image/jpeg'){
require("funcao_upload.php");
$name1 = $id_pic."_"."img1.jpg";            
Redimensionar1("images", $foto1, $name1, 312, "");
}

 

Está ocorrendo o seguinte:
- Fiz o upload de uma imagem 498 L x 312 A -> ficou com 312 L x 498 A;
- Fiz o upload de uma imagem 195 L x 312 A -> ficou com 312 L x 195 A;
- Fiz o upload de uma imagem 1024 L x 768 A -> ficou com 768 L x 416 A;

 

Pelo que pude perceber, está ocorrendo de pegar a altura da imagem original e transformar na largura da upada... O.o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então deixa assim:

 

 


 

function Redimensionar1($pasta, $imagem, $name1, $altura = '', $largura= ''){  $img = imagecreatefromjpeg($imagem['tmp_name']);  $x = imagesx($img); $y = imagesy($img); if(empty($largura)){ $largura = $x; }else{  $largura = ($largura * $x)/$y; } if(empty($altura)){ $altura = $y; }else{  $altura = ($altura * $y)/$x; }  $nova = imagecreatetruecolor($largura, $altura);  imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);  imagejpeg($nova, "$pasta/$name1");  imagedestroy($img);  imagedestroy($nova);  return $name1;  }

só fica uma pequena confusão.

 

não é necessário passar o último parametro, ele é opcional.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que deve estar ocorrendo erro no cálculo.

 

A imagem 195 L x 312 A ficou com 195 L x 499 A.

 

A imagem de 498 L x 312 A ficou com 498 L x 195 A.

 

A imagem de 1024 L x 768 A ficou com 1024 L x 234 A.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que é a cabeça mais fresca, não? =P

 

Segue o código para redimensionar informando a altura:

 

function Redimensionar1($imagem, $name1, $altura, $pasta){
$img = imagecreatefromjpeg($imagem['tmp_name']);
$x   = imagesx($img);
$y   = imagesy($img);
$largura = ($altura * $x)/$y;
$nova = imagecreatetruecolor($largura, $altura);
imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
imagejpeg($nova, "$pasta/$name1");
imagedestroy($img);
imagedestroy($nova);
return $name1;
}

Agradeço a ajuda. =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu só tinha esquecido de substituir a $altura nessa linha pela $largura:

 

 

$largura = ($altura * $x)/$y;

 

Enfim, que bom que conseguiu, não se esqueça de colocar o tópico como resolvido :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu só tinha esquecido de substituir a $altura nessa linha pela $largura:

 

 

$largura = ($altura * $x)/$y;

 

Enfim, que bom que conseguiu, não se esqueça de colocar o tópico como resolvido :)

 

Ainda estou aprendendo a usar o fórum.

 

Acho que fiz certo. =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.