<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MXStudio &#187; Lucasferreira</title>
	<atom:link href="http://www.mxstudio.com.br/author/lucasferreira/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mxstudio.com.br</link>
	<description>Macromedia e Adobe - Artigos, colunas, tutorias e muito mais...</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:31:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Salvando um MovieClip como Imagem &#8211; Flash 8</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/salvando_um_movieclip_como_imagem___flash_8/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/salvando_um_movieclip_como_imagem___flash_8/#comments</comments>
		<pubDate>Tue, 21 Feb 2006 00:00:00 +0000</pubDate>
		<dc:creator>Lucasferreira</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Mostrarei neste artigo, uma solu&#231;&#227;o de como salvar ou exportar, um MC como uma Imagem, jpg ou png no pc do usu&#225;rio.]]></description>
			<content:encoded><![CDATA[<h1>Coluna Flash &#8211; Salvando um MovieClip como uma Imagem &#8211; Flash 8 (BitmapData) + PHP (GD)</h1>
<p>Buenos,</p>
<p align="justify">Mostrarei neste artigo, uma solução de como salvar ou exportar, um MC como uma Imagem, jpg ou png no pc do usuário.</p>
<p align="justify">Lembrando que para que o mesmo funcione, será necessário <strong>Flash 8</strong> e PHP com a biblioteca <strong>GD</strong> instalada. Digamos que este tutorial seja de nível intermediário.</p>
<p align="justify"><strong>1º Passo &#8211; Entendendo o Processo:</strong></p>
<p align="justify">Até o Flash mx 2004 isto não era possível, agora no Flash 8 com a classe <strong>BitmapData</strong>, podemos tratar qualquer MC, Video ou Imagem, como um Bitmap. Aí é que consiste a tecnica, através da BitmapData, pegaremos pixel por pixel do MC, e enviaremos via LoadVars ao PHP. Chegando no PHP, o mesmo através da biblioteca GD, aloca os pixels, transforma as cores, e monta nossa imagem.</p>
<p align="justify">Neste artigo mostrarei o código PHP para este recurso, e disponibilizarei uma classe facilitadora para a exportação.</p>
<p align="justify"><strong>2º Passo &#8211; A classe MCE &#8211; MovieClip Exporter:</strong></p>
<p align="justify">Começaremos baixando a classe <a href="http://www.lucasferreira.com/tutoriais/tuto8/MCE.as">aqui</a>. Deverá ser salva na pasta de nosso projeto. Se quiserem analisá-la fiquem a vontade. Neste, mostrarei só seus eventos e métodos.</p>
<p><strong>Exemplo:</strong></p>
<div id="codigo" title="AS">/* criando o obj MCE&#8230;*/<br />
var mceImagem:MCE = new MCE();<br />
/*em format definimos se queremos JPG ou PNG. PNG depende do servidor, mais JPG quase todos tem&#8230; */<br />
mceImagem.format = &#8220;jpg&#8221;;<br />
/*target é o mc Alvo da exportação&#8230; */<br />
mceImagem.target = mcImagem;<br />
/*criando listener de eventos..*/<br />
var objMCE:Object = new Object();<br />
/*evento de início da captura&#8230;*/<br />
objMCE.onCaptureStart = function(mcAlvo:MovieClip, tempoInicio:Date):Void<br />
{<br />
trace(&#8220;Iniciando Captura&#8230; em: &#8221; + mcAlvo);<br />
mcProgresso._visible = true;<br />
}<br />
/*evento de progresso na captura, quanto mais pixels, mais vai tempo&#8230;*/<br />
objMCE.onCaptureProgress = function(mcAlvo:MovieClip, progresso:Number):Void<br />
{<br />
trace(&#8220;Status: &#8221; + progresso + &#8220;%&#8221;);<br />
mcProgresso.xBar._xscale = progresso;<br />
}<br />
/*captura dos pixels do mc, em uma imagem, dispostos em uma string, tb informa a largura e altura, necessaria para criação da imagem&#8230;*/<br />
objMCE.onCaptureEnd = function(mcAlvo:MovieClip, lvEnvia:LoadVars, tempoInicio:Date, tempoFinal:Date):Void<br />
{<br />
trace(&#8220;Captura Finalizada&#8230; em: &#8221; + mcAlvo);<br />
trace(&#8220;Tempo Estimado: &#8221; + ((tempoFinal &#8211; tempoInicio)/1000));<br />
lvEnvia.sendAndLoad(&#8220;./salvar.php?r=&#8221; + (new Date()).getSeconds(), lvImagem, &#8220;POST&#8221;);<br />
mcProgresso._visible = false;<br />
}<br />
/*evento chamado no cancelamento da ação de exportação&#8230;*/<br />
objMCE.onCaptureCancel = function(mcAlvo:MovieClip, tempoInicio:Date, tempoFinal:Date):Void<br />
{<br />
trace(&#8220;Cancelado&#8230; em: &#8221; + mcAlvo);<br />
mcProgresso._visible = false;<br />
}<br />
/*adicionando os eventos a classe&#8230; */<br />
mceImagem.addListener(objMCE);<br />
/*o método export da class MCE, tem um argumento, que é o nome da imagem, junto com a pasta de destino&#8230;*/<br />
mceImagem.export(&#8220;imagem101.jpg&#8221;);</div>
<p align="justify"><strong>Bom a classe tem algumas definições:</strong></p>
<div>
<ul>
<li style="padding-bottom: 6px;">MCE.format &#8211; &#8220;jpg&#8221; ou &#8220;png&#8221;: Formato de exportação da imagem, PNG fica muito melhor, porém não é todo servidor que o GD da suporte ao PNG.</li>
<li>MCE.target: O MovieClip que será exportado em questão.</li>
</ul>
</div>
<p align="justify"><strong>E e dois métodos:</strong></p>
<div>
<ul>
<li style="padding-bottom: 6px;">MCE.export: Possui um argumento, filename:String, que é o nome do arquivo junto ao seu destino, se for o caso.</li>
<li>MCE.cancel: Como o processo pega pixel por pixel, dependendo do tamanho de seu MC demora um pouco, então esse método aborta a exportação.</li>
</ul>
</div>
<p align="justify"><strong>E os eventos:</strong></p>
<div>
<ul>
<li style="padding-bottom: 6px;">MCE.onCaptureStart(mcAlvo:MovieClip, tempoInicio:Date) &#8211; mc que esta sendo exportado, e obj Date do inicio da exportação, e bom para uma comparação de tempo caso demore muito a imagem, no evento onCaptureEnd tem o tempoFinal.</li>
<li style="padding-bottom: 6px;">MCE.onCaptureProgress(mcAlvo:MovieClip, progresso:Number) &#8211; o primeiro é o mesmo para todos os eventos, já o progresso é o numero da porcentagem do progresso, para caso queiram fazer um preload.</li>
<li style="padding-bottom: 6px;">MCE.onCaptureEnd(mcAlvo:MovieClip, lvEnvia:LoadVars, tempoInicio:Date, tempoFinal:Date) &#8211; ao final da captura, nos envia o mc alvo, o objeto LoadVars já com as informações que deve ser enviada ao PHP, o tempo de inicio do processo e o tempo final.</li>
<li>MCE.onCaptureCancel(mcAlvo:MovieClip, tempoInicio:Date, tempoFinal:Date) &#8211; quando cancelada a ação, mc alvo, o tempo que iniciou e o tempo em que foi cancelada.</li>
</ul>
</div>
<p align="justify"><strong>Observação:</strong></p>
<p align="justify">É interessante, delimitarmos a área do MC, nem que seja virtualmente, para que o processo saiba onde começar e onde terminar, sempre.</p>
<p align="center"><img title="PHP" src="http://www.mxstudio.com.br/imagens_artigos/lucasFerreira_SalvandoMcImagem_fev06_imagens/img1.jpg" alt="" width="&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;3º Passo - Enfim o código PHP:&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Segue abaixo o código php, já comentado:&lt;/p&gt; &lt;div id=" height="395" />&lt;?php<br />
error_reporting(E_ALL);<br />
//função responsável pela exportação do MC&#8230;<br />
function exporta()<br />
{<br />
global $_REQUEST;<br />
//verificando se o GD está instalado&#8230;<br />
if(!function_exists(&#8220;imagecreate&#8221;)) die(&#8220;Para exportar o MC, vc necessitará da biblioteca GD instalada!&#8221;);<br />
//resgatando variáveis do flash e tb verificamos se as mesmas foram preenchidas&#8230;<br />
$w = (isset($_REQUEST['width']) &amp;&amp; strlen($_REQUEST['width']) &gt; 0) ? intval($_REQUEST['width']) : 3;<br />
$h = (isset($_REQUEST['height']) &amp;&amp; strlen($_REQUEST['height']) &gt; 0) ? intval($_REQUEST['height']) : 3;<br />
$s = (isset($_REQUEST['dataString']) &amp;&amp; strlen($_REQUEST['dataString']) &gt; 0) ? $_REQUEST['dataString'] : &#8220;2550000,2550000\n2550000,2550000&#8243;;<br />
$ext = (isset($_REQUEST['format']) &amp;&amp; strlen($_REQUEST['format']) &gt; 0) ? $_REQUEST['format'] : &#8220;png&#8221;;<br />
$nome = (isset($_REQUEST['filename']) &amp;&amp; strlen($_REQUEST['filename']) &gt; 0) ? $_REQUEST['filename'] : &#8220;imagem.&#8221; . $ext ;<br />
//criando image do GD&#8230;<br />
$image = (function_exists(&#8220;imagecreatetruecolor&#8221;)) ? imagecreatetruecolor($w, $h) : imagecreate($w, $h);<br />
//preenchendo o fundo da imagem de branco&#8230;os pixels brancos nao vem do flash por uma economia&#8230;<br />
imagefill($image, 0, 0, 0xFFFFFF);<br />
//quebrando a string que vem do flash em um array de pixels&#8230;<br />
$color = explode(chr(13), $s);<br />
for($i = 0; $i &lt; $h; $i++){<br />
$linha = explode(&#8220;,&#8221;, $color[$i]);<br />
for($j = 0; $j &lt; $w; $j++){<br />
//pegando cada pixel, de cada linha&#8230;<br />
$hex = $linha[$j];<br />
if(strlen($hex) &gt; 0){<br />
//convertendo HEX para DECIMAL&#8230;<br />
while(strlen($hex) &lt; 6) $hex = &#8220;0&#8243; . $hex;<br />
$r = hexdec(substr($hex, 0, 2));<br />
$g = hexdec(substr($hex, 2, 2));<br />
$b = hexdec(substr($hex, 4, 2));<br />
//alocando o rgb a imagem&#8230;<br />
$tmp = imagecolorallocate($image, $r, $g, $b);<br />
//inserindo pixel na nova imagem&#8230;<br />
imagesetpixel($image, $j, $i, $tmp);<br />
}<br />
}<br />
}<br />
//salvando o arquivo de imagem, de acordo com o tipo especificado&#8230;<br />
if($ext == &#8220;jpg&#8221;)<br />
imagejpeg($image, $nome, 100);</p>
<p>if($ext == &#8220;png&#8221;)<br />
imagepng($image, $nome, 100);</p>
<p>//limpando memória&#8230;<br />
imagedestroy($image);<br />
//resposta para o Flash&#8230;<br />
echo &#8220;salvo=true&amp;file=&#8221; . $nome . &#8220;&amp;&#8221;;<br />
}<br />
//executando função export&#8230;<br />
exporta();<br />
?&gt;</p>
<p align="justify">Bom é isso pessoal, salva este php na mesma pasta do swf de preferência, rode em seu servidor, não esqueçam que a pasta em que a imagem vai ser salva no servidor tem que ter permissão de escrita 777 (<strong>chmod 777</strong>). No mais clique abaixo e faça o download de um exemplo completo.</p>
<p><a href="http://www.lucasferreira.com/tutoriais/tuto8/tuto8.zip">Clique aqui</a> para baixar os arquivos de exemplo deste tutorial.</p>
<p>Até a próxima e abracetas&#8230; <img src='http://www.mxstudio.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p align="left"><strong>Autor: <strong>Lucas Ferreira &#8211; </strong></strong><a href="http://www.lucasferreira.com/" target="_blank">www.lucasferreira.com</a></p>
<p>Qualquer dúvida envie um email para <a href="http://mce_host/mx_novo/wp-admin/maito:contato@lucasferreira.com" target="new">contato@lucasferreira.com</a> ou acesse o nosso <a href="http://forum.mxstudio.com.br" target="forum">fórum</a>.</p>
<p><script src="http://www.mxstudio.com.br/js/ColorCode.js"></script></p>
<p><script type="text/javascript"><!--</p>
<p>FormatPHP(new Array("PHP"));
FormatAS(new Array("AS"));
// --></script> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/salvando_um_movieclip_como_imagem___flash_8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Salvar Imagens pelo Flash no botão direito</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/salvar_imagens_pelo_flash_no_botao_direito/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/salvar_imagens_pelo_flash_no_botao_direito/#comments</comments>
		<pubDate>Thu, 05 May 2005 00:00:00 +0000</pubDate>
		<dc:creator>Lucasferreira</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Vamos aprender a fazer uma intera&#231;&#227;o entre Flash e PHP, para que possamos inserir]]></description>
			<content:encoded><![CDATA[<div style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
<p><span style="color: #990000;"><strong><span style="font-size: small;">Salvar Imagens pelo Flash no botão direito</span></strong></span></p>
<p>Olá Flashers de plantão,</p>
<p>Bom esse é o meu primeiro tutorial, mas ja estou louco para fazer mais <img src='http://www.mxstudio.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Neste vamos aprender a fazer uma interação entre Flash e PHP, para que possamos inserir em uma imagem dinâmica , através da Classe ContextMenu do Flash. Então vamos a diversão:</p>
<p><strong>1º &#8211; O Código PHP:</strong></p>
<p style="padding: 3px 3px 3px 8px; border-left: 4px solid black; border-right: 1px solid black; border-top: 1px solid black; border-bottom: 1px solid black; font-family: 'Courier New', Courier, mono; font-size: 12px;">&lt;?php<br />
//pegando a variável file passada pelo getURL do FLASH;<br />
$fileVirtual = $_REQUEST["file"];<br />
//montando o nome final do arquivo&#8230;<br />
$fileAtual = explode(&#8220;/&#8221;, $fileVirtual);<br />
$fileAtual = $fileAtual[sizeof($fileAtual)-1];<br />
//abrindo stream de código do arquivo&#8230;.<br />
$file = fopen($fileVirtual,&#8221;r&#8221;);<br />
$content = fread($file, filesize($fileVirtual));<br />
//definindo tipo do arquivo para download&#8230;<br />
$tipo = &#8220;image/jpeg&#8221;;<br />
//definindo header para ação, e emitindo código do arquivo&#8230;<br />
header(&#8220;Content-type: $tipo&#8221;);<br />
header(&#8220;Content-Disposition: attachment; filename=$fileAtual&#8221;);<br />
echo $content;<br />
?&gt;</p>
<p>Salve o Arquivo na pasta do onde será publicado o <strong>SWF</strong>, com o nome de <strong>download.php</strong>.</p>
<p><strong>2º &#8211; Vamos ao Flash:</strong></p>
<p>Crie um movie de tamanho e fps livres, e você já pode criar duas camadas: Actions &amp; mcAlvo. E agora logo após no primeiro frame crie o seguinte MovieClip:</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/tuto1_imagens/img1.jpg" alt="" width="500" height="&gt;  &lt;/p&gt; &lt;p&gt;Dentro de nosso &lt;b&gt;mcAlvo&lt;/b&gt;, devemos fazer mais duas camadas, hit &amp; alvo. Começaremos pela segunda alvo, você deve desenhar a área imaginária para a foto a ser carregada, e apartir dela faça um MovieClip com o nome de &lt;b&gt;alvo&lt;/b&gt;, e &lt;b&gt;instance name&lt;/b&gt; também de &lt;b&gt;alvo&lt;/b&gt;:&lt;/p&gt; &lt;p&gt;&lt;img src=" /><strong>_root</strong>: <strong>Actions.</strong></p>
<p><strong>3º &#8211; As Ações do Flash:</strong></p>
<p style="padding: 3px 3px 3px 8px; border-left: 4px solid black; border-right: 1px solid black; border-top: 1px solid black; border-bottom: 1px solid black; font-family: 'Courier New', Courier, mono; font-size: 12px;">//criando objetos e demais&#8230;<br />
//movieclip loader para carregamento de imagem e seu listener&#8230;<br />
var mvlImg:MovieClipLoader = new MovieClipLoader();<br />
var objImg:Object = new Object();<br />
//criando menu direito&#8230;<br />
var menuDirImg:ContextMenu = new ContextMenu();<br />
var clickSalva:ContextMenuItem = new ContextMenuItem();<br />
//função responsável pelo click da imagem<br />
clickSalva.onSelect = function(obj) {<br />
//pegando variável file com a localização da imagem e passando ao PHP por getURL!<br />
var img = obj._parent.file;<br />
getURL(&#8220;download.php?file=&#8221; add img);<br />
};<br />
clickSalva.caption = &#8220;Salvar Imagem&#8230;&#8221;;<br />
clickSalva.separatorBefore = true;<br />
clickSalva.enabled = true;<br />
//elimine essa linha caso queira que as opções padrão do menu direito apareçam<br />
menuDirImg.hideBuiltInItems();<br />
menuDirImg.customItems = [clickSalva];<br />
//adicionando listener e defindo botão direito da imagem somente quando ela estiver carregada&#8230;<br />
objImg.onLoadComplete = function(){<br />
mcAlvo.hitBt.menu = menuDirImg;<br />
}<br />
mvlImg.addListener(objImg);<br />
//definindo variável ao mcAlvo de localização da imagem&#8230;<br />
mcAlvo.file = &#8220;foto_load.jpg&#8221;;<br />
// e por fim dando o load na imagem, e com o carregamento da mesma nosso Salvar Imagem, ja estará funcionanodo <img src='http://www.mxstudio.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
mvlImg.loadClip(mcAlvo.file, mcAlvo.alvo);<br />
//<br />
//opcional, se vc quer q o mãozinha do hitBt suma&#8230;<br />
mcAlvo.hitBt.useHandCursor = false;</p>
<p><strong>4º Só testar:</strong></p>
<p>Agora e so testar pessoal, rodando em qualquer server <strong>PHP</strong> ja vamos ter um preview:</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/tuto1_imagens/img5.jpg" alt="" width="500" height="&gt; &lt;/p&gt; &lt;p&gt;Abracetas... ;)&lt;/p&gt; &lt;p&gt;&lt;a href=" />www.lucasferreira.com</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/salvar_imagens_pelo_flash_no_botao_direito/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

