Ir para conteúdo

POWERED BY:

Arquivado

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

Felipe Sobral

[Resolvido] Ao redimensionar, a imagem fica com fundo preto

Recommended Posts

Eu "criei" um sisteminha de upload de imagens onde independente qual seja o tamanho da imagem ela é forçada a ficar do tamanho que eu desejo, não do tamanho que ela é, mas sem estica-la.

O problema é que os espaços vazios da imagem são preenchidos com a cor preta.

Já procurei tópicos com o mesmo problema mas eles não solucinaram o meu.

 

Segue código:

 


<?php
$largura_thumb = 400;
$altura_thumb  = 300;
$largura_crop  = 400;
$altura_crop   = 300;
$pasta         = "imagens";

//Pega a imagem que será carimbada com a marca d'agua
$imagem_principal = $_FILES['image']['tmp_name'];  
//Pega a extensao da imagem que ira ser cadastrada
$extensao = strtolower(substr($_FILES['image']['name'], -3));
// Cria um nome para a imagem a partir da criptografia da data e hora atual com extensão
$nome_final = md5(date("r")).'.'.$extensao;		  		
//Define as funcoes para as determinadas extensoes:
if($extensao == "jpg"){ $img_thumb = imagecreatefromjpeg($imagem_principal);  }
elseif($extensao == "png"){ $img_thumb = imagecreatefrompng($imagem_principal);  }
elseif($extensao == "gif"){ $img_thumb = imagecreatefromgif($imagem_principal);  }
//Pega a largura da imagem
$x   = imagesx($img_thumb);
//Pega a altura da imagem
$y   = imagesy($img_thumb);
//Define uma altura proporcional a altura escolhida
if($x>$y) $altura_thumb = ($largura_thumb * $y)/$x;
if($y>$x) $largura_thumb = ($altura_thumb * $x)/$y;
//Cria uma nova imagem com as proporcoes escolhidas
$nova_thumb = imagecreatetruecolor($largura_thumb, $altura_thumb);	   
//Colore a nova imagem de branco
$branco = imagecolorallocate($nova_thumb, 255, 255, 255);
imagefill($nova_thumb, 0, 0, $branco);
//Mescla a imagem real com a recentemente criada
imagecopyresampled($nova_thumb, $img_thumb, 0, 0, 0, 0, $largura_thumb, $altura_thumb, $x, $y);
//Envia o thumbnail para o servidor
if($extensao == "jpg"){ imagejpeg($nova_thumb, "$pasta/$nome_final", 90);  }
elseif($extensao == "png"){ imagepng($nova_thumb, "$pasta/$nome_final");  }
elseif($extensao == "gif"){ imagegif($nova_thumb, "$pasta/$nome_final");  }

##------- Recorta a imagem -------#

$imagem_thumb = "$pasta/$nome_final";  
//Define as funcoes para as determinadas extensoes:
if($extensao == "jpg"){ $img_thumb = imagecreatefromjpeg($imagem_thumb);  }
elseif($extensao == "png"){ $img_thumb = imagecreatefrompng($imagem_thumb);  }
elseif($extensao == "gif"){ $img_thumb = imagecreatefromgif($imagem_thumb);  }
//Cria uma nova imagem com as proporcoes escolhidas
$nova_thumb = imagecreatetruecolor($largura_crop, $altura_crop);
//Colore a nova imagem de branco	   
$branco = imagecolorallocate($nova_thumb, 255, 255, 255);
imagefill($nova_thumb, 0, 0, $branco);
//Calcula as distancias
$dist_x = ($largura_thumb - $largura_crop)/2;
$dist_y = ($altura_thumb - $altura_crop)/2;
//Mescla a imagem real com a recentemente criada
imagecopyresampled($nova_thumb, $img_thumb, 0, 0, $dist_x, $dist_y, $largura_crop, $altura_crop, $largura_crop, $altura_crop);
unlink($imagem_principal);
//Envia o thumbnail para o servidor
if($extensao == "jpg"){ imagejpeg($nova_thumb, "$pasta/$nome_final", 90);  }
elseif($extensao == "png"){ imagepng($nova_thumb, "$pasta/$nome_final");  }
elseif($extensao == "gif"){ imagegif($nova_thumb, "$pasta/$nome_final");  }
?>

 

Espero que possam me ajudar.

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um teste rápido aqui e foi de boa.

Ao invés de usar o imagefill, utilizei o imagefillrectangle.

Este exemplo joga a imagem na tela.

 

<?php 

header("Content-Type: image/jpeg");

$img          = '17012012190.jpg';
$thumb_width  = 100;
$thumb_height = 100;

$src_img = imagecreatefromstring(file_get_contents($img));
$new_img = imagecreatetruecolor($thumb_width, $thumb_height);
$white   = imagecolorallocate($new_img, 255, 255, 255);

imagefilledrectangle($new_img, 0, 0, $thumb_width, $thumb_height, $white);

list($width, $height) = getimagesize($img);
if($width > $height){
$zoom = $thumb_width / $width;
$target_width = $thumb_width;
$target_height = $height * $zoom;
} else {
$zoom = $thumb_height / $height;
$target_width = $width * $zoom;
$target_height = $thumb_height;
}

$x = ($thumb_width - $target_width) / 2;
$y = ($thumb_height - $target_height) / 2;

imagecopyresampled($new_img, $src_img, $x, $y, 0, 0, $target_width, $target_height, $width, $height);

imagejpeg($new_img, '');

 

@braços e fique com Deus!

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.