Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!!!
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.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.
Como você ta chamando?
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.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
>
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
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.
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.
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. =DEu 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 :)
>
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. =)
Tente isso :)