Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Nigre

[Resolvido] Geração de Thumbnails

Recommended Posts

Tenho o seguinte formulário:

 

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
<p><input type="file" name="arquivo[]" /></p>
<p><input type="file" name="arquivo[]" /></p>
<p><input type="file" name="arquivo[]" /></p>
<p><input type="file" name="arquivo[]" /></p>
<p><input type="file" name="arquivo[]" /></p>
<p><input type="submit" value="Enviar" /></p>
</form>

O code original pega essas imagens e as move para um pasta. Até aí, tudo bem, funciona. Mas estou tentando introduzir no meio uma função para criar também thumbnails automáticos, mas daí o code inteiro só funciona quando é submetido apenas uma foto. Creio que o problema deva estar no laço... Alguém pode me ajudar? OBRIGADO!

 

Aí vai o code php completo:

 

// Numero de campos de upload
$numeroCampos = 5;
// Tamanho máximo do arquivo (em bytes)
$tamanhoMaximo = 5000000;
// Extensões aceitas
$extensoes = array(".jpg", ".png");
// Caminho para onde o arquivo será enviado
$caminho = "../../Imprensa/fotos_imprensa/";
// Substituir arquivo já existente (true = sim; false = nao)
$substituir = false;
 
for ($i = 0; $i < $numeroCampos; $i++) {
 
	// Informações dos arquivos enviados
	$nomeArquivo = $_FILES["arquivo"]["name"][$i];
	$tamanhoArquivo = $_FILES["arquivo"]["size"][$i];
	$nomeTemporario = $_FILES["arquivo"]["tmp_name"][$i];
			 
	// Verifica se o arquivo foi colocado no campo
	if (!empty($nomeArquivo)) {
 
		$erro = false;
 
		// Verifica se o tamanho do arquivo é maior que o permitido
		if ($tamanhoArquivo > $tamanhoMaximo) {
			$erro = "O arquivo " . $nomeArquivo . " não deve ultrapassar " . $tamanhoMaximo. " bytes";
		} 
		// Verifica se a extensão está entre as aceitas
		elseif (!in_array(strrchr($nomeArquivo, "."), $extensoes)) {
			$erro = "A extensão do arquivo <b>" . $nomeArquivo . "</b> não é válida";
		} 
		// Verifica se o arquivo existe e se é para substituir
		elseif (file_exists($caminho . $nomeArquivo) and !$substituir) {
			$erro = "O arquivo <b>" . $nomeArquivo . "</b> já existe";
		}
 
		// Se não houver erro
		if (!$erro) {
    
            // Função gera Thumbnail
            function geraThumb($photo, $output, $new_width) {
    
            $source = imagecreatefromstring(file_get_contents($photo));
            list($width, $height) = getimagesize($photo);
            if ($width>$new_width) {
                $new_height = ($new_width/$width) * $height;
                $thumb = imagecreatetruecolor($new_width, $new_height);
                imagecopyresampled($thumb, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagejpeg($thumb, $output, 100);
            }
            else {
                copy($photo, $output);
            }
            }

            // Cria o Thumbnail 
            geraThumb($nomeTemporario, "../../Imprensa/fotos_imprensa/drops_".$nomeArquivo, 120);
			
			// Move o arquivo original para o caminho definido
			move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo));
			
			// Mensagem de sucesso
			echo "O arquivo <b>".$nomeArquivo."</b> foi enviado com sucesso. <br />";
		} 
		// Se houver erro
		else {
			// Mensagem de erro
			echo $erro . "<br />";
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira coisa que você vai fazer é tirar a declaração da função de dentro do laço, ou seja este código aqui.

 

function geraThumb($photo, $output, $new_width) {
    
            $source = imagecreatefromstring(file_get_contents($photo));
            list($width, $height) = getimagesize($photo);
            if ($width>$new_width) {
                $new_height = ($new_width/$width) * $height;
                $thumb = imagecreatetruecolor($new_width, $new_height);
                imagecopyresampled($thumb, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagejpeg($thumb, $output, 100);
            }
            else {
                copy($photo, $output);
            }
            }

Coloca isto fora do laço e habilita todas as mensagens de erro.

 

Tenta de novo e veja o que imprime.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal, coloquei a função fora do laço e deu certo. Agora eu queria gravar no banco, mas não está dando certo.

Tentei fazer assim:

 

for ($i = 0; $i < $numeroCampos; $i++) {
 
	// Informações dos arquivos enviados
	$nomeArquivo = $_FILES["arquivo"]["name"][$i];
	$tamanhoArquivo = $_FILES["arquivo"]["size"][$i];
	$nomeTemporario = $_FILES["arquivo"]["tmp_name"][$i];
        $nomeThumbnail = "thumb_".$_FILES["arquivo"]["name"][$i];

// Se não houver erro
if (!$erro) {

// Cria o Thumbnail 
geraThumb($nomeTemporario, "../../Imprensa/fotos_imprensa/drops_".$nomeArquivo, 120);
			
// Move o arquivo original para o caminho definido
move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo));
			
// Grava no Banco
mysql_select_db($database_connPMMC, $connPMMC);
mysql_query("INSERT INTO fotos_imprensa (fotos, thumbnail, data) VALUES ('$nomeArquivo', '$nomeThumbnail', NOW())");
			
// Mensagem de sucesso
echo "O arquivo <b>".$nomeArquivo."</b> foi enviado com sucesso. <br />";
		
} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troca isto

 

mysql_query("INSERT INTO fotos_imprensa (fotos, thumbnail, data) VALUES ('$nomeArquivo', '$nomeThumbnail', NOW())");

Por isto

 

mysql_query("INSERT INTO fotos_imprensa (fotos, thumbnail, data) VALUES ('$nomeArquivo', '$nomeThumbnail', NOW())") or die(mysql_error());

Veja o que imprime.

 

Carlos Eduardo

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.