Ir para conteúdo

POWERED BY:

Arquivado

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

Prove Yourself

Exibir imagens dinâmicas e uma página HTML

Recommended Posts

Boa noite, gostaria de saber se é possível exibir um imagem criada dinamicamente juntamente com uma página HTML. Se eu enviar os headers consigo exibir a imagem, caso contrário aparecem um monte de caracteres estranhos... Gostaria de colocar a imagem no meio de uma página HTML. Segue o código:

Prestem atenção no método redimensionar...

Classe Imagem

<?php
/*
*
*	Classe Imagem
*	22/12/2008
*	Willian Gustavo Veiga
*
*/

class Imagem {
	private $imagem;
	private $largura;
	private $altura;
	private $tipo;
	
	public function set_largura($largura) {
		if(is_numeric($largura))
			$this->largura = (int) $largura;
		else
			return false;
	}
	
	public function set_altura($altura) {
		if(is_numeric($altura))
			$this->altura = (int) $altura;
		else
			return false;
	}
	
	public function set_tipo($tipo) {
		$tipos = array('image/jpeg', 'image/png', 'image/gif');
		
		if(in_array($tipo, $tipos))
			$this->tipo = $tipo;
		else
			return false;
	}
	
	public function __construct($imagem) {
		$this->imagem = new Imagick($imagem);
	}
	
	public function redimensionar() {
		if($this->imagem->resizeImage($this->largura, $this->altura, imagick::FILTER_UNDEFINED, 0)) {
			header("Content-type: {$this->tipo}");
			echo $this->imagem;
		}
		else
			return false;
	}
}
?>
Observação ImageMagick é demais ! :D

 

Obrigado a todos. Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na página que gera a imagem,você seta os headers.

Supondo que a página que gera as imagens se chama imagens.php,você faz:

<img src="imagens.php"></img>

Com o gd funcionou,inclusive to fazendo um script aqui em que utilizei isso.

Testai!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na página que gera a imagem,você seta os headers.

Supondo que a página que gera as imagens se chama imagens.php,você faz:

<img src="imagens.php"></img>

Com o gd funcionou,inclusive to fazendo um script aqui em que utilizei isso.

Testai!

Dessa maneira dá pau de cabeçalho:
Cannot modify header information - headers already sent by ...
:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me mande a página que você colocou isso.

Olha um exemplo ridiculo que fiz:

 

passManip.class.php:

<?php
/* A class containing some methods to check how strong a password is
\* @author proust
*/

require_once 'colorFormatException.class.php';

class passManip
{
	
	/* Allowed color format: Red[0-255] Green[0-255] Blue[0-255]
	\* Example: 255 255 255 [white], 255 000 000 [red]
	*///-\Arrays
	private $backgroundColor, $weakPPassColor, $mediumPPassColor, $strongPPassColor;
	
	//String variables
	private $password, $passForceString;
	
	//Integer variables
	private $passwordLen, $passForceCount;
	
	//Arrays
	private $passForce;
	
	/*=@Constructor=*/
	public function passManip
	(
		$password = null, $backgroundColor = null, $weakPPassColor = null,
		$mediumPPassColor = null, $strongPPassColor = null
	){
		$this->setPassword($password);
		$this->setBackgroundColor($backgroundColor);
		$this->setWeakPPassColor($weakPPassColor);
		$this->setMediumPPassColor($mediumPPassColor);
		$this->setStrongPPassColor($strongPPassColor);
	}
	
	/*=@Setters=*/
	public function setBackgroundColor($color){
		$this->backgroundColor = (Array) $this->fColor($color);
		return $this;
	}
	
	public function setWeakPPassColor($color){
		$this->weakPPassColor = (Array) $this->fColor($color);
		return $this;
	}
	
	public function setMediumPPassColor($color){
		$this->mediumPPassColor = (Array) $this->fColor($color);
		return $this;
	}
	
	public function setStrongPPassColor($color){
		$this->strongPPassColor = (Array) $this->fColor($color);
		return $this;
	}
	
	public function setPassword($password){
		$this->password = (String) $password;
		return $this;
	}
	
	/*=@Getters=*/
	public function getPassForceString(){
		return (String) $this->passForceString;
	}
	
	public function getPasswordLen(){
		return (Integer) $this->passwordLen;
	}
	
	public function getPassForceCount(){
		$ret = $this->passForceCount;
		if($this->passForceCount == 0)
			$ret += 1;
		return (Integer) $ret;
	}
	
	/*=@Methods=*/
	private function throwCFE(){
		$message = 'One or more of the colors is not into the apropriated format'."\n";
		$message .= 'Format:Red[0-255] Green[0-255] Blue[0-255]'."\n";
		$message .= 'Example: 255 255 255 [white], 255 000 000 [red]'."\n";
		
		throw new ColorFormatException($message);
	}
	
	private function fColor($color){
		if(strlen($color) != 11 && $color != null)
			$this->throwCFE();
		$c = (String) $color;
		$c = explode(' ', $c);
		return $c;
	}
	
	public function gassPassForce(){
		$this->passwordLen = strlen($this->password);
		@preg_match_all('/[^a-z]/i', $this->password, $matchs);
		@$this->passForceCount = count($this->passForce = array_chunk($matchs[0], 4));
		if($this->passForceCount >= 3){
			$this->passForceString = 'Strong';
		} else if($this->passForceCount == 2){
			$this->passForceString = 'Medium';
		} else {
			$this->passForceString = 'Weak';
		}
		return $this;
	}
	
	public function drawImage(){
		header("Content-type: image/png");
		$image = ImageCreate(150, 20);
		$this->colorAllocate($image, $this->backgroundColor);
		ImageRectangle($image, 0, 0, 120, 4, ImageColorAllocate($image, 000, 000, 000));
		$pwf = $this->getPassForceCount();
		if($pwf >= 1){
			@$size = count($this->passForce[0]);
			if($size == null){ $size = 1; }
			ImageFilledRectangle($image, 1, 1, ($size*10), 3, $this->colorAllocate($image, $this->weakPPassColor));
			$textColor = $this->weakPPassColor;
		}
		if($pwf >= 2){
			$size = count($this->passForce[1]);
			ImageFilledRectangle($image, 41, 1, (40+($size*10)), 3, $this->colorAllocate($image, $this->mediumPPassColor));
			$textColor = $this->mediumPPassColor;
		}
		if($pwf >= 3){
			$size = count($this->passForce[2]);
			if($size >= 4){
				$size = 4;
			}
			ImageFilledRectangle($image, 81, 1, (80+($size*10)), 3, $this->colorAllocate($image, $this->strongPPassColor));
			$textColor = $this->strongPPassColor;
		}
		ImageString($image, 3, 2, 4, $this->getPassForceString(), $this->colorAllocate($image, $textColor));
		ImagePng($image);
		ImageDestroy($image);
	}
	
	private function colorAllocate($image, $color){
		return ImageColorAllocate($image, $color[0], $color[1], $color[2]);
	}

}
?>

colorFormatException.class.php:

<?php
/* 
\* @author proust
*/

class colorFormatException Extends Exception
{
	public function __toString(){
		return nl2br($this->getMessage());
	}
}
?>

Exemplo de usagem:

 

example.html:

<html>
	<head>
		<style>
			input, select {
				background-color: #AEEEEE;
				border: 1px solid #CDC673;
				color: #CD5555;
			}
			#form {
				background-color: #ADD8E6;
				color: #FF7256;
				line-height: 2em;
			}
		</style>
		<script>
			function sleep(milliseconds){
				var start = new Date().getTime();
				for (var i = 1;i > 0;i++){
					if ((new Date().getTime() - start) > milliseconds){
					break;
					}
				}
			}

			function imageon(id, imgSrc, key, value){
				var element = document.getElementById(id);
				while(element.firstChild){
					element.removeChild(element.firstChild);
				}
				var image = document.createElement('img');
				var ext = imgSrc.split(".");
				var len = ext.length-1;
				if(ext[len] == "php"){
					imgSrc = imgSrc + '?' + key + '=' + value;
				}
				image.setAttribute('src', imgSrc);
				element.appendChild(image);
			}
		</script>
	</head>
	<body bgColor="#C1CDC1" onload="imageon('result', 'page.php', 'password', '1');">
		<fieldset id="form">
			<legend>Register form</legend>
			<label for="password">Password:</label>
			<input type="password" name="password" 
			onKeyPress="sleep(50);imageon('result', 'page.php', 'password', this.value);"
			onSelect="this.value = '';imageon('result', 'page.php', 'password', '1');">
			</input> <font color="#ff0000" size="2px">*Select to erase</font>
			<br /><div id="result" style="width: 200; height: 20;"></div>
		</fieldset>
	</body>
</html>

page.php:

<?php
require 'classes/passManip.class.php';

$password = $_GET['password'];

try {
	$passmanip = new passManip;
	$passmanip->setBackgroundColor('173 216 230')->setWeakPPassColor('205 092 092')->
	setMediumPPassColor('102 205 170')->setStrongPPassColor('069 139 116')->
	setPassword($password)->gassPassForce()->drawImage();
} catch(ColorFormatException $e){
	echo $e;
}
?>

Codes bem bem feios...mas serve de exemplo e tem um resultado até legal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um scrip antes de exibir a index, se o horario do servidor for antes das 18h vai para um diretorio ou arquivo, e se for depois das 18h vai para outro diretorio, ai é so mudar o layout, simples, facil e rapido, fazendo isso por css fica mais facil ainda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marlon mas não é isso que ele quer.

Ele quer gerar a imagem em base de alguma informação,e não simplesmente exibir x ou y imagem em base da mesma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, sinceramente ainda não analisei o código que você mandou, vou fazer com calma...

Até agora, fiz da seguinte maneira:

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head> 
	<title>Image Work Beta</title> 
</head>
<body> 
	<div id="total">
		<h3>Image Work Beta</h3>
		<div id="conteudo">
			<form method="post" action="processa.php" enctype="multipart/form-data">
				<label for="imagem">Imagem</label>
				<input type="file" name="imagem" id="imagem" />
				<div id="manipular">
					<p></p>
					<input type="radio" name="opcao" value="redimensionar" />
					<label>Redimensionar</label>
					<label for="largura">Largura</label>
					<input type="text" name="largura" id="largura" />
					<label for="altura">Altura</label>
					<input type="text" name="altura" id="altura" />
				</div>
				<div id="efeitos">
					<p>Todos aqueles pós para maquiar a sua imagem :)</p>
				</div>
				<input type="submit" value="Deixe tudo pronto, por favor?" />
			</form>
		</div>
		<div id="rodape">
		</div>
	</div>
</body>
</html>
Imagem.class.php
<?php
/*
*
*	Classe Imagem
*	22/12/2008
*	Willian Gustavo Veiga
*
*/

class Imagem {
	private $imagem;
	private $largura;
	private $altura;
	private $tipo;
	
	public function get_imagem() {
		return $this->imagem;
	}
	
	public function set_largura($largura) {
		if(is_numeric($largura))
			$this->largura = (int) $largura;
		else
			return false;
	}
	
	public function set_altura($altura) {
		if(is_numeric($altura))
			$this->altura = (int) $altura;
		else
			return false;
	}
	
	public function set_tipo($tipo) {
		$tipos = array('image/jpeg', 'image/png', 'image/gif');
		
		if(in_array($tipo, $tipos))
			$this->tipo = $tipo;
		else
			return false;
	}
	
	public function __construct($imagem) {
		$this->imagem = new Imagick($imagem);
	}
	
	public function redimensionar() {
		if($this->imagem->resizeImage($this->largura, $this->altura, imagick::FILTER_UNDEFINED, 0)) {
			header('Content-Type: image/jpeg');
			echo $this->imagem;
			return true;
		}
		else
			return false;
	}
}
?>
processa.php
<?php

require_once 'classes/Imagem.class.php';

$opcao = $_POST['opcao'];
$arquivo = $_FILES['imagem']['tmp_name'];

$largura = $_POST['largura'];
$altura = $_POST['altura'];
$tipo = $_FILES['imagem']['type'];

switch($opcao) {
	case 'redimensionar':
		$imagem = new Imagem($arquivo);

		$imagem->set_largura($largura);
		$imagem->set_altura($altura);
		$imagem->set_tipo($tipo);
		
		$pagina = 'efeitos/redimensionar.php';
		break;
	default:
		echo '<p>Eita! Selecione ao menos uma opção! :(</p>';
		break;
}

require_once 'resultado.php';
?>
resultado.php
<html>
<head>
</head>
<body>
	<img src="<?php echo $pagina ?>" />
</body>
</html>
redimensionar.php
<?php
	$imagem->redimensionar();
?>
Ufa!

É o seguinte... no index você seleciona a imagem que quer redimensionar, escolhe os tamanhos. Através de post, os dados vão para a página processa.php, que verifica a ação escolhida pelo usuário (apenas redimensionar, por enquanto...). O processa.php inclui o arquivo resultado.php (layout), que inclui o arquivo redimensionar.php dentro das tags img... :)

 

Obrigado pela atenção e ajuda. Vou analisar o seu código.

Abraços e boas festas!

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.