Ir para conteúdo

POWERED BY:

Arquivado

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

José Enésio

Imagem Aleatória

Recommended Posts

Esse é um antigo script ancião que eu desenvolvi já faz um tempinho, vou compartilhar com vocês pessoal do imasters!

Esse é o código devidamente comentado:

 

<?php 
function imagem_de_erro($msg, $bg = array(255, 0, 0), $txt = array(0, 0, 0)){
	header("Content-type: image/jpg");
	$img = imagecreate(350, 120); //cria a imagem de erro
	$bg_col = imagecolorallocate($err_img, $bg[0], $bg[1], $bg[2]); //a cor de fundo... a primeira chamada pra essa função sempre coloca a cor de fundo.
	$txt_col = imagecolorallocate($err_img, $txt[0], $txt[1], $txt[2]); // agora define uma nova cor pra usa no texto
	imagestring($img, 1, 200, 100, $msg, $txt_col); //escreve o que foi enviado no parâmetro $msg na imagem
	imagejpeg($img); //envia a imagem pro navegador
	imagedestroy($img); //limpa a memória relacionada à imagem, como já foi pro navegador não é mais de nossa importância.
} //função pra quando der algum erro qualquer.

////////////////////////////////////////////////
///
$diretorio_imagens = "imagens/"; //define o diretório onde serão jogadas as imagens
///
////////////////////////////////////////////////

$dir = @opendir($diretorio_imagens); //abre o diretório das imagens. É lá onde você deve despejar suas imagens
if($dir == false){ //verifica se ocorreu um erro ao abrir o diretório das imagens (por exemplo, não existe tal diretório...)
	imagem_de_erro("Ocorreu um erro na hora de abrir o diretório.");
} else{
	$imagens = array(); //prefiro declarar minha array antes de usá-la, dessa maneira eu posso me divertir com meu array_push()!
	while(($arquivo = readdir($dir)) !== false){ //agora vai lendo o diretório e encontrando os arquivos e pegando somente as imagens
		if(preg_match("/(jpg|jpeg|png|gif)$/i", $arquivo)){
			array_push($imagens, $arquivo); /*apenas se for de algum dos formatos desejados que a imagem é adicionada à nossa array de imagens. Se não for, não vai pra array e pronto. Você pode adicionar mais formatos ali adicionando mais '|ext' ali do lado do gif, na nossa expressão regular, mas tem que ver lá no php.net se o formato é suportado!
Não se esqueça de incrementar a nossa estrutura de ifs logo abaixo, claro depois de checar as funções no PHP.net para ver qual é a que deve ser usada para o seu formato de imagem desejado!*/
		}
	}
	if(count($imagens) < 1){ //se não tinha nenhuma imagem, mostra um erro.
		imagem_de_erro("Não existem imagens no diretório.");
	} else{
		shuffle($imagens); //pra ajuda mais um pouco na aleatorização. Só com o rand tava muito repetitivo
		$aleatorio = rand(0, count($imagens) - 1); //pega um número qualquer pra ser usado na array
		$imagem_selecionada = $imagens[$aleatorio];
		$imagem_selecionada = $diretorio_imagens.$imagem_selecionada; //pega uma imagem qualquer da array imagens e combina com o nosso diretório de imagens
		$formato_imagem = explode(".", $imagem_selecionada);
		$formato = end($formato_imagem); //você deve se lembrar do while logo acima...
		if($formato == "jpg" || $formato == "jpeg"){ //se a imagem for JPG, então cria a imagem de uma jpg, manda uma jpg pro navegador e limpa a memória
			header("Content-type: image/jpg");
			$img = imagecreatefromjpeg($imagem_selecionada);
			imagejpeg($img);
			imagedestroy($img);
		} elseif($formato == "png"){ //mesma coisa, agora com PNG
			header("Content-type: image/png");
			$img = imagecreatefrompng($imagem_selecionada);
			imagepng($img);
			imagedestroy($img);
		} elseif($formato == "gif"){ //sem muita utilidade, já que GIF animado só em sonhos msm... mas lá vai.
			header("Content-type: image/gif");
			$img = imagecreatefromgif($imagem_selecionada);
			imagegif($img);
			imagedestroy($img);
		}
	}
}
 ?>

 

O que fazer: salve como um arquivo .php esse código, e crie uma pasta nova onde você vai jogar as suas imagens. Agora mude a variável $diretorio_imagens para referenciar essa sua pasta nova. Não esqueça da barra após o nome da pasta!

 

Como usar: coloque no seu HTML: <img src="imagem.php" />. Feito! Às vezes é preferível jogar esse arquivo e essa pasta de imagens para outra pasta, para não haver confusão caso seu site já tenha uma pasta imagens. Você pode também botar no CSS se quiser!

 

E se eu quiser usar em um fórum?: Simples!!! Crie uma pasta que termine com .jpg, .jpeg, .png ou .gif, jogue o seu código como index.php nessa pasta, e crie a pasta de imagens lá dentro, jogue suas imagens lá, e é só referenciar para essa pasta com extensão de imagem, que o seu servidor fará tudo pra você!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal, cara! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Vejo diversas vezes essa dúvida. Vai ajudar bastante o pessoal! :D

 

 

 

O que eu faria de diferente é isto:

 

- Em vez de abrir o diretório, ler arquivo por arquivo e colocá-los no array, eu usaria glob() ou scandir();

 

- Em vez de rand(), usaria array_rand();

 

- Em vez dos elseif's, eu faria um switch.

 

 

 

 

A funcionalidade seria a mesma. Apenas reduziria um pouco o número de linhas.

 

 

Parabéns! :)

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo também penso assim, só que quando abri os meus arquivos aqui vi esse tutorial deu uma preguiça de refazer :P

 

Mas fica aí a idéia do Beraldo quem quiser mudar!

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.