Jump to content


Photo

Criar Thumbnail Em Upload Multiplos De Imagem


  • Faça o login para participar
9 replies to this topic

#1 Hudão

Hudão

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 10/12/2008, 22:30

Boa noite pessoal,

Eu tenho um script em PHP que peguei a algum tempo na internet que faz o seguinte:

1 - faz upload de multiplos arquivos de imagem do tipo .JPG
2 - Verifica se o arquivo enviado é do tipo imagem.
3 - cria um único nome para cada arquivo de imagem que é transferido.
3 - adiciona o nome do arquivo criado a um banco de dados MySql


Esse script tava me servindo muito bem, mas agora eu senti a necessidade desse script criar uma imagem Thumbnail (imagem pequena) com o mesmo nome único de cada imagem transferida, porém com o início do nome assim: thumb_[resto do nome gerado].jpg

alguém sabe como fazer? Desde já agradeço. Segue o script:

<?php
		// Código do anuncio
		$cod_anuncio = $_SESSION['cod_anuncio'];
		
		// Pasta de destino das fotos
		$Destino = 'img/';
		
		//Obtém dados do upload
		$Fotos = $_FILES['fotos'];
		
		// Contagem de fotos enviadas
		$Conta = 0;
		
		// Itera sobre as enviadas e processa as validações e upload
		
		for($i = 0; $i < sizeof($Fotos['name']); $i++)
		{
			// Passa valores da iteração atual
			$Nome = $Fotos['name'][$i];
			$Tamanho = $Fotos['size'][$i];
			$Tipo = $Fotos['type'][$i];
			$Tmpname = $Fotos['tmp_name'][$i];
		
			// Verifica se tem arquivo enviado
			if($Tamanho > 0 && strlen($Nome) > 1)
			{
				// Verifica se é uma imagem
				if(preg_match("/\.(gif|bmp|png|jpg|jpeg)$/i", $Nome, $Tipo))
				{
					//Renomeia a foto com um unico nome
					$imagem_nome = md5(uniqid(time())).".jpg";
					
					// Caminho completo de destino da foto
					$Caminho = $Destino . $imagem_nome;
					
						$sql="INSERT INTO tbimagens (cod_anuncio, imagem) VALUES ('$cod_anuncio', '$imagem_nome')";
						$query=mysql_query($sql,$conexao);
		
					// Tudo OK! Move o upload!
					if(move_uploaded_file($Tmpname, $Caminho))
					{
						echo '<div align="center">Foto #' . ($i+1) . ' enviada.</div><br/>';
						
						// Faz contagem de enviada com sucesso
						$Conta++;
					}
					else // Erro no envio
					{
						// $i+1 porque $i começa em zero
						echo '<div align="center">Não foi possível enviar a foto #' . ($i+1) . '</div><br/>';
					}
				}
			}
		}

		if($Conta) // Imagens foram enviadas, ok!
			{
				echo '<br/><div align="center">Foi(am) enviada(s) ' . $Conta . ' foto(s).</div><br>';
				echo '<div align="center"><a href="finaliza.php">Clique aqui para continuar</a></div><br>';
			}
			else // Nenhuma imagem enviada, faz alguma ação
			{
				echo '<br><div align="center">Você não enviou fotos!</div><br>';
				echo '<a href="#" onclick="Javascript=history.go(-1)"><div align="center">Clique aqui e tente novamente</div></a><br>';
			}
 ?>


#2 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 11/12/2008, 08:11

tem vários métodos, tenho um arquivo que gera a thumb a partir de quando ela é exibida, e não quando o arquivo é 'uplodeado'.

thumb.php
<?phpob_start();// Constantes: variaveis que não mudam em todo o programa// path do win2k. no unix, mude de 'd:/path' para '/home/usuario/www'define('PATH_IMG', 'arquivos/imgs');//define('MAX_WIDTH', $largura);define('MAX_WIDTH', 240);define('MAX_HEIGHT', 150);# Pega onde está a imagem// so tenta redimensionar imagens$mime = array('.jpg','.png','.gif','.jpeg','.bmp');$imagemQs = $img1;$imagem   = PATH_IMG . '/' . $imagemQs;if(!in_array(substr($imagem,-4),$mime)){    die;}$sImagem  = @file_get_contents($imagem);// se o thumbnail ja existir, mostra o mesmo.if(@file_exists(PATH_IMG.'/thm_'.$imagemQs)){    header('Content-type: image/jpeg');    readfile(PATH_IMG.'/thm_'.$imagemQs);    die;}# Carrega a imagem$img = null;$img = @imagecreatefromstring($sImagem);// Se a imagem foi carregada com sucesso, testa o tamanho da mesmaif ($img) {    // Pega o tamanho da imagem e proporção de resize    $width = imagesx($img);    $height = imagesy($img);    $scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height);    // Se a imagem é maior que o permitido, encolhe ela!    if ($scale < 1) {        $new_width = floor($scale * $width);        $new_height = floor($scale * $height);        // Cria uma imagem temporária        $tmp_img = imagecreatetruecolor($new_width, $new_height);        // Copia e resize a imagem velha na nova (trocado imagecopyresized por imagecopyresampled. mais qualidade e menor arquivo)        imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);        imagedestroy($img);        $img = $tmp_img;    }	}// Cria uma imagem de erro se necessárioif (!$img) {    $img = imagecreate(MAX_WIDTH, MAX_HEIGHT);    imagecolorallocate($img, 204, 204, 204);    $c = imagecolorallocate($img, 153, 153, 153);    $c1 = imagecolorallocate($img, 0, 0, 0);    imageline($img, 0, 0, MAX_WIDTH, MAX_HEIGHT, $c);    imageline($img, MAX_WIDTH, 0, 0, MAX_HEIGHT, $c);    imagestring($img, 2, 12, 55, 'erro ao carregar imagem <br>'.$_SERVER['QUERY_STRING'], $c1);}// o exemplo a seguir salva o thumbnail no mesmo lugar que a imagem original com o prefixo thumb, para fins de cache.// se não precisar desta funcionalidade, basta comentar o primeiro imagejpeg()// Salva a imagem no mesmo dir com prefixo thm_ e qualidade melhorada. só se não houve um erroif(!empty($imagemQs) && @file_exists($imagem)){    imagejpeg($img,PATH_IMG.'/thm_'.$imagemQs,85);}// Mostra a imagemheader('Content-type: image/jpeg');imagejpeg($img);?>

Aí para chamar a imagem, tu faz:

<img src="thumb.php?img1=caminhodaimagem" border="0"/>

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#3 Grundor

Grundor

    Turista

  • Usuários
  • 39 posts
  • Sexo:Não informado
  • Localidade:Nova Friburgo-RJ
  • Interesses:Aprender mais sobre programação e desenvolvimento de sistemas. Me divertir, compartilhar o que eu sei, fazer amigos e promover a paz mundial^^rsrs

Posted 11/12/2008, 09:10

Hudão vc teria esse script todo pra eu poder dá uma olhada??
grato.

#4 Hudão

Hudão

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 11/12/2008, 09:51

Grundor, o script está todo aí, o que não estava é o formulário HTML que to colocando agora:

<form action="upload.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<input type="file" name="fotos[]" />
<input name="cod_anuncio" type="hidden" id="cod_anuncio" value="<?php echo $_SESSION['cod_anuncio']; ?>" />
<input type="submit" value="Enviar Imagens"/>

a quantidade de <input type="file" name="fotos[]" /> pode ser qualquer, eu uso 15 somente, mas poderia ser 1 milhão. basta acrescentar se necessário.

ae maykel, vou dar uma estudada nesse script seu pra ver se vai funcionar comigo. obrigado

#5 Grundor

Grundor

    Turista

  • Usuários
  • 39 posts
  • Sexo:Não informado
  • Localidade:Nova Friburgo-RJ
  • Interesses:Aprender mais sobre programação e desenvolvimento de sistemas. Me divertir, compartilhar o que eu sei, fazer amigos e promover a paz mundial^^rsrs

Posted 11/12/2008, 09:55

Falta de atenção minha, dormi mal essa noite... hehe
amanhã é sexta graças a Deus..

vlw

#6 Hudão

Hudão

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 11/12/2008, 10:12

Para eu chamar a imagem maykel, eu coloco <img src="thumb.php?img1=caminhodaimagem" border="0"/> em thumb.php ou em outra página?

#7 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 11/12/2008, 10:24

tipo...

vamos supor que na sua página PRODUTOS.PHP você quer chamar uma imagem. Essa imagem é a pdt1.jpg. e é gigante!

aonde vc vai exibir tu vai colocar <img src="thumb.php?img1=imagens/pdt1.jpg" border="0"/>

Ao invés dele mostrar a imagem gigante, ele cria uma thumb e salva na pasta que você setou em THUMB.PHP (nas primeiras linhas tem a pasta pra setar, e as medidas tu altera em MAX WIDTH e MAX HEIGHT acho!

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#8 Hudão

Hudão

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 18/12/2008, 15:10

eu fiz do jeito que vc me disse, mas o resultado não foi muito bom, apareceu imagens cinzas com um X no meio delas, não sei esplicar direito como ficou. eu fiz o link da imagem assim:

<img width="103" height="77" border="0" src="thumb.php?img1=img/<?php echo $array_imagem['imagem'];?>" />

#9 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 18/12/2008, 16:37

e essa array img está imprimindo o que?

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#10 Hudão

Hudão

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 18/12/2008, 16:58

Estava imprimindo um erro, mas já corrigi.

Edição feita por: Hudão, 25/12/2008, 23:11.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq