Ir para conteúdo

POWERED BY:

Arquivado

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

andrea cerqueira

imagecolortransparent

Recommended Posts

estou criando um png transperente com php a partir de uma foto com um fundo colorido chapado qualquer.

uso o imagecolortransparent($img, $alpha); pra deixar o fundo chapado transparente, até aí tudo bem, mas o problema é que a imagem acaba ficando como um gif transparente ou seja fica um friso en volta dela, pq na verdade um alpha perfeito tem várias cores e não só uma como é em gif, e queria saber como resolver isso, tipo teria como usar vários imagecolortransparent($img, $alpha); setando várias cores próximas a cor chapada que eu uso no fundo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$w = (int)$_POST['width'];
$h = (int)$_POST['height'];

$img = imagecreatetruecolor($w, $h);

imagefill($img, 0, 0, 0x33FFFF);

$rows = 0;
$cols = 0;

// now process every POST variable which contains a pixel color
for($rows = 0; $rows < $h; $rows++){
	// convert the string into an array of n elements
	$c_row = explode(",", $_POST['px' . $rows]);
	for($cols = 0; $cols < $w; $cols++){
		// get the single pixel color value
		$value = $c_row[$cols];
		// if value is not empty (empty values are the blank pixels)
		if($value != ""){
			// get the hexadecimal string (must be 6 chars length) so add the missing chars if needed
			$hex = $value;
			while(strlen($hex) < 6){
				$hex = "0" . $hex;
			}
			// convert value from HEX to RGB
			$r = hexdec(substr($hex, 0, 2));
			$g = hexdec(substr($hex, 2, 2));
			$b = hexdec(substr($hex, 4, 2));
			// allocate the new color N.B. teorically if a color was already allocated we dont need to allocate another time but this is only an example
			$test = imagecolorallocate($img, $r, $g, $b);
			// and paste that color into the image at the correct position
			imagesetpixel($img, $cols, $rows, $test);
		}
	}
}
$alpha = imagecolorallocate($img, 51, 255, 255);
imagecolortransparent($img, $alpha);
imagepng($img, "teste.png");
echo "Feito";
//header("Content-type:image/png");

?>

esse é o codigo php todo :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou criando um png transperente com php a partir de uma foto

não encontrei nenhuma referência no script onde exista uma chamada para criação de imagem à partir de uma origem.

 

 

tem algo estranho no script, mas nao posso afirmar com certeza.

poderia enviar o script da página anterior? o formulário que envia o valor de $_POST['px' . XX] ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa parte do flash não tem nada a ver com a minha dúvida mas se você quer ver está aí:

 

var loader:mloaderWindow = this.createClassObject(mloaderWindow, "loader", 10, {_x:-1000, _y:-1000})
loader.setStyle("borderColor", 0xCC0000)

// listener which receives the broadcast message from the PrintScreen class
var listener:Object = new Object();

// copy in progress...
listener.onProgress = function(target:MovieClip, loaded:Number, total:Number){
	var perc = Math.round((loaded/total)*100)
	loader.label = "Convertendo... " + perc + "%"
	loader.value = perc
}

// copy is complete, send the result LoadVars to PHP
listener.onComplete = function(target:MovieClip, load_var:LoadVars){
	loader.label = "sending to php...";
	load_var.send("pixels.php", "_self", "POST");
	loader.close();
}

// Print Button has been clicked
function print_me(){
	pn = new PrintScreen();	// initialize the PrintScreen class
	pn.addListener(listener);	// assign a listener
	pn.print(this,0,0,410,390); // copy the _root
	loader.label = "salvando... 0%";
	loader.open(true, true, true);	// open a loader
}

print_me();

o que eu preciso é gerar um png com transparencia perfeita, ou seja não pode ser transparencia de uma cor apenas senão fica tosco como gif transparente http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok. vou analisar.

 

realmente ajudou bastante mostrar o ActionScript. Farei um teste e te retornarei o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá, fiz uma teste pra simular o script

a parte em negrito sao os trechos que modifiquei

 

<?php

//$w = (int)$_POST['width'];

//$h = (int)$_POST['height'];

 

$w = 150;

$h = 150;

 

$img = imagecreatetruecolor($w, $h);

 

imagefill($img, 0, 0, 0x33FFFF);

 

$rows = 0;

$cols = 0;

 

$i = 1;

$l = $i + $w;

while($i < $l){

$c_row[] = $i;

$i++;

}

 

// now process every POST variable which contains a pixel color

for($rows = 0; $rows < $h; $rows++){

// convert the string into an array of n elements

//$c_row = explode(",", $_POST['px' . $rows]);

for($cols = 0; $cols < $w; $cols++){

// get the single pixel color value

$value = $c_row[$cols];

// if value is not empty (empty values are the blank pixels)

if($value != ""){

// get the hexadecimal string (must be 6 chars length) so add the missing chars if needed

$hex = $value;

while(strlen($hex) < 6){

$hex = "0" . $hex;

}

// convert value from HEX to RGB

$r = hexdec(substr($hex, 0, 2));

$g = hexdec(substr($hex, 2, 2));

$b = hexdec(substr($hex, 4, 2));

// allocate the new color N.B. teorically if a color was already allocated we dont need to allocate another time but this is only an example

$test = imagecolorallocate($img, $r, $g, $B);

// and paste that color into the image at the correct position

imagesetpixel($img, $cols, $rows, $test);

}

}

}

$alpha = imagecolorallocate($img, 51, 255, 255);

imagecolortransparent($img, $alpha);

imagepng($img, "teste.png");

echo "Feito";

echo "<br />";

echo '<img src=teste.png>';

//header("Content-type:image/png");

 

?>

 

analisei o código meio por cima. o que entendi é que ele gera uma imagem com tom gradiente usando a palete de cores blue, criando um fade entre preto e azul.

 

no teste a imagem foi gerada.

 

não entendi muto bem o seu problema.

 

poderia explicar novamente.

 

e também qual a finalidade do Flash ?

 

não entendi muito bem o que é feito no flash que causa uma interação com o php. Por acaso o usuário insere um número que é enviado para o PHP gerar a imagem e consequentemente a imagem ser carregada no flash ?

 

 

obs: nao testei o actionScript

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu percebi que você não tinha entendido minha dúvida e por isso estava me pedindo o flash :)

é o seguinte o meu script tá funcionando, o problema é a transparencia, eu preciso fazer uma transparencia com vários tons e não uma cor só pois fica tosco o corte entendeu?

é tipo assim, a pessoa faz o upload de uma foto, ela vai pro flash e lá ela recorte o que interessa a ela.

depois disso o flash manda pro php que varre a tela e faz a captura pixel por pixel entendeu? só que o fundo obviamente é chapado não é transparente pois ele tá varrendo a tela, então pro php fazer essa varredura e deixar o fundo transparente eu usei o imagecolortransparent, só que ele só aceita uma cor como alpha e pra ficar direito tem que ser várias cores senão o corte fica como gif transparente, fica um contorno entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah bão! hehe

 

foi +- isso que eu tinha entendido.

 

você poderia ter explicado desse modo na primeira vez.

 

é bem simples fazer isso.

 

a parte que o usuário deixou fora da seleção troque por uma cor diferente do tom da paleta de todas as outras cores. O recomendável é o verde fluorescente.

 

depois disso, basta aplicar o alpha em tudo que for verde transparente.

 

entendeu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

então foi isso mesmo que eu fiz, até usei o verde como você pode ver no codigo 33ffff :) mas não adianta fica um friso.

é como fazer um gif e tirar o fundo dele, você sabe do que eu to falando? fica um friso, mas em png dá pra se fazer um alpha perfeito pq você pode fazer um alpha com várias cores e não apenas uma como acontece no gif.

o imagecolortransparent só deixa 1 uma cor, eu quero saber se existe uma forma de crir png via php e fazer esse alpha entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi. esse friso, eu chamo de "serrilhado".

 

você pode tentar criar um contorno com uma camada de cores para suavizar o "friso"

 

nao sei dizer se é o mais viável, mas por enquanto foi a primeira coisa que pensei.

 

achei interessante, vou tentar fazer. Mas continue tentando aí também.

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem como criar um contorno na imagem via php? ou melhor, no alpha?

sim, é possível

já vi isso em algum lugar. Acho que nas bibliotecas do jpgraph... nao sei ao certo.

 

vou pesquisar

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu nunca fiz nada com gráfico, estou até procurando tb, mas acho que seria png e não jpgraph né?

jpgraph é uma classe em php conhecida pela comunidade php do mundo inteiro:

 

download:

http://www.aditus.nu/jpgraph/jpdownload.php.

 

artigos e dicas:

http://imasters.com.br/artigo/4639/php/jpgraph/

http://www.asial.co.jp/jpgraph/

http://www.aditus.nu/jpgraph/

http://www.phphacks.com/content/view/50/33/

http://www.dicas-l.com.br/dicas-l/20051201.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

por isso..

 

sim, é possível

já vi isso em algum lugar. Acho que nas bibliotecas do jpgraph... nao sei ao certo.

nao conheço o jpgraph a fundo mas provavelmente deve ter dentro dele alguma classe que faça o que você precisa.

 

salva essa imagem, abre e troque o fundo pra você ver o friso que eu estou falando:

http://www.cuboaoquadrado.info/8826c684281...ac967c0e2eb.png

vi a imagem, não está ruim... você quer criar algum tipo de efeito contornando a parte do corte não é?

pense em como você faria isso utilizando o photoshop ou corel photopaint, ou outro software qualquer, e faça em php.

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.