Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
li o artigo do Lucas Ferreira, sobre como Salvar um MC como imagem e deu tudo certo,
porém, estou preciso que a imagem seja salva no servidor sem que o usuário perceba e não
mais em seu PC. Além disso preciso salvar o caminho dessa imagem no Banco de Dados para
que possa mostrar mais tarde.
Segue script:
var mcProgresso:MovieClip;
mcProgresso._visible = false;
//definindo imagem e setando o cache de bitmap...
var mcImagem:MovieClip;
mcImagem.cacheAsBitmap = true;
//so para poder modificar o mc...
for(var i in mcImagem){
var mc = mcImagem[i];
if(typeof mc == "movieclip"){
mc.onPress = function():Void
{
this.startDrag(false);
this.swapDepths(1000);
this.onRelease = this.onReleaseOutside = function():Void
{
this.stopDrag();
}
}
}
}
//Objeto para fazer o download da imagem, após o PHP gera-la...
var frBaixa:flash.net.FileReference = new flash.net.FileReference();
//criando obj LoadVar, que vai enviar a imagem ao PHP...
var lvImagem:LoadVars = new LoadVars();
lvImagem.onLoad = function(sucesso:Boolean):Void
{
if(sucesso){
trace("Enviada com sucesso...");
tTrace.text += "Enviada com sucesso...";
if(!frBaixa.download(lvImagem.file)){
trace("Não foi Possível salvar a imagem...");
tTrace.text += "Não foi Possível salvar a imagem...";
}
} else {
trace("Erro!");
tTrace.text += "Erro!";
}
}
//criando o obj MCE...
var mceImagem:MCE = new MCE();
mceImagem.format = "jpg";
mceImagem.target = mcImagem;
//criando listener de eventos..
var objMCE:Object = new Object();
//evento de início da captura...
objMCE.onCaptureStart = function(mcAlvo:MovieClip, tempoInicio:Date):Void
{
tTrace.text = "";
trace("Iniciando Captura... em: " + mcAlvo);
tTrace.text += "Iniciando Captura... em: " + mcAlvo + chr(13);
mcProgresso._visible = true;
}
//evento de progresso na captura, quanto mais pixels, mais vai tempo...
objMCE.onCaptureProgress = function(mcAlvo:MovieClip, progresso:Number):Void
{
trace("Status: " + progresso + "%");
mcProgresso.xBar._xscale = progresso;
}
//captura dos pixels do mc, em uma imagem, dispostos em uma string, tb informa a largura e altura, necessaria para criação da imagem...
objMCE.onCaptureEnd = function(mcAlvo:MovieClip, lvEnvia:LoadVars, tempoInicio:Date, tempoFinal:Date):Void
{
trace("Captura Finalizada... em: " + mcAlvo);
tTrace.text += "Captura Finalizada... em: " + mcAlvo + chr(13);
trace("Tempo Estimado: " + ((tempoFinal - tempoInicio)/1000));
tTrace.text += "Tempo Estimado: " + ((tempoFinal - tempoInicio)/1000).toString() + chr(13);
lvEnvia.sendAndLoad("./salvar.php?r=" + (new Date()).getSeconds(), lvImagem, "POST");
mcProgresso._visible = false;
}
//evento chamado no cancelamento da ação de exportação...
objMCE.onCaptureCancel = function(mcAlvo:MovieClip, tempoInicio:Date, tempoFinal:Date):Void
{
trace("Cancelado... em: " + mcAlvo);
tTrace.text += "Cancelado... em: " + mcAlvo + chr(13);
mcProgresso._visible = false;
}
mceImagem.addListener(objMCE);
//
//definindo ação para o botao salvar...
btSalvar.onRelease = function():Void
{
//o método export da class MCE, tem um argumento, que é o nome da imagem, junto com a pasta de destino
mceImagem.export("imagem101.jpg");
}
mcProgresso.btCancelar.onRelease = function():Void
{
//o método cancel aborta a exportação...
mceImagem.cancel();
}
Além desse códio ha uma classe AS:
dynamic class MCE {
private var events:Object;
private var firstTimer:Date;
private var lastTimer:Date;
private var dataString:String;
private var mcAlvo:MovieClip;
private var bdMC:flash.display.BitmapData;
private var _ext:String;
private var w:Number = 100;
private var h:Number = 100;
private var row:Number = 0;
private var loopCopy:Number;
private var lvTransport:LoadVars;
private var cancelar:Boolean = false;
function MCE(){
this.lvTransport = new LoadVars();
this.removeListener();
this._ext = "jpg";
}
/* funções de dispacho de eventos by Lucas Ferreira */
private function callEvent(evt:String, args:Array):Void
{
if(typeof this.events == "object" && typeof this.events[evt] == "function"){
this.events[evt].apply(this, args);
}
}
public function addListener(evt_listerner:Object):Void
{
this.removeListener();
this.events = evt_listerner;
}
public function removeListener(Void):Void
{
delete this.events;
this.events = new Object();
}
/*getter`s and setter`s*/
public function set format(f:String):Void
{
this._ext = f;
}
public function get format():String
{
return this._ext;
}
public function set target(t:MovieClip):Void
{
this.mcAlvo = t;
this.refreshBD();
}
public function get target():MovieClip
{
return this.mcAlvo;
}
/*funções para salvar o MC*/
private function refreshBD():Void
{
this.w = this.mcAlvo._width;
this.h = this.mcAlvo._height;
this.lvTransport.width = this.w;
this.lvTransport.height = this.h;
this.bdMC = new flash.display.BitmapData(this.w, this.h, true);
this.bdMC.draw(this.mcAlvo);
}
private function copyLinha():Void
{
var dataRow:Array = new Array();
for (var i = 0; i < this.w; i++) {
var rgb:Array = new Array();
var px = this.bdMC.getPixel(i, this.row);
var strpx = px.toString(16);
if(px == 0xFFFFFF) strpx = "";
dataRow.push(strpx);
}
this.dataString += dataRow.join(",") + chr(13);
this.row++;
this.callEvent("onCaptureProgress", [this.mcAlvo, int(new Number(this.row/this.h) * 100)]);
if(this.row >= this.h && !this.cancelar){
clearInterval(this.loopCopy);
this.lastTimer = new Date();
this.lvTransport.dataString = this.dataString;
this.callEvent("onCaptureEnd", [this.mcAlvo, this.lvTransport, this.firstTimer, this.lastTimer]);
}
}
public function export(filename:String):Void
{
this.refreshBD();
this.lvTransport.format = this.format;
this.lvTransport.filename = (filename == undefined) ? "imagem." + this.format : filename;
this.cancelar = false;
this.firstTimer = new Date();
this.dataString = "";
this.row = 0;
this.callEvent("onCaptureStart", [this.mcAlvo, this.firstTimer]);
this.loopCopy = setInterval(mx.utils.Delegate.create(this, this.copyLinha), 3);
}
public function cancel():Void
{
this.cancelar = true;
clearInterval(this.loopCopy);
this.lastTimer = new Date();
this.callEvent("onCaptureCancel", [this.mcAlvo, this.firstTimer, this.lastTimer]);
}
}
e um script PHP
<?php
error_reporting(E_ALL);
//função responsável pela exportação do MC...
function exporta()
{
global $_REQUEST;
//verificando se o GD está instalado...
if(!function_exists("imagecreate")) die("Para exportar o MC, você necessitará da biblioteca GD instalada!");
//resgatando variáveis do flash e tb verificamos se as mesmas foram preenchidas...
$w = (isset($_REQUEST['width']) && strlen($_REQUEST['width']) > 0) ? intval($_REQUEST['width']) : 3;
$h = (isset($_REQUEST['height']) && strlen($_REQUEST['height']) > 0) ? intval($_REQUEST['height']) : 3;
$s = (isset($_REQUEST['dataString']) && strlen($_REQUEST['dataString']) > 0) ? $_REQUEST['dataString'] : "2550000,2550000\n2550000,2550000";
$ext = (isset($_REQUEST['format']) && strlen($_REQUEST['format']) > 0) ? $_REQUEST['format'] : "png";
$nome = (isset($_REQUEST['filename']) && strlen($_REQUEST['filename']) > 0) ? $_REQUEST['filename'] : "imagem";
//criando image do GD...
$image = (function_exists("imagecreatetruecolor")) ? imagecreatetruecolor($w, $h) : imagecreate($w, $h);
//preenchendo o fundo da imagem de branco...os pixels brancos nao vem do flash por uma economia...
imagefill($image, 0, 0, 0xFFFFFF);
$color = explode(chr(13), $s);
for($i = 0; $i < $h; $i++){
$linha = explode(",", $color[$i]);
for($j = 0; $j < $w; $j++){
$hex = $linha[$j];
if(strlen($hex) > 0){
//convertendo HEX para DECIMAL...
while(strlen($hex) < 6) $hex = "0" . $hex;
$r = hexdec(substr($hex, 0, 2));
$g = hexdec(substr($hex, 2, 2));
$b = hexdec(substr($hex, 4, 2));
//alocando o rgb a imagem...
$tmp = imagecolorallocate($image, $r, $g, $b);
//inserindo pixel na nova imagem...
imagesetpixel($image, $j, $i, $tmp);
}
}
}
//salvando o arquivo de imagem, de acordo com o tipo especificado...
if($ext == "jpg")
imagejpeg($image, $nome, 100);
if($ext == "png")
imagepng($image, $nome, 100);
//limpando memória...
imagedestroy($image);
//resposta para o Flash...
echo "salvo=true&file=" . $nome . "&";
}
//executando função export...
exporta();
?>
Bom galera, estou precisando muito, muito mesmo disso,
se alguém souber ajuda ai...
Um abraço e obrigado!
Carregando comentários...