
Etiquetas: BitmapData draw getPixel getURL sendAndLoad
Este método solo es recomendable si estamos obligados a utilizar Actionscript 2 y Flash Player 8. Si podemos utilizar Flash Player 10, podemos hacer la conversión directamente en local sin pasar por servidor. Hay un ejemplo, aquí: Guardar una imagen con la función save() de FileReference
Si podemos utilizar FP9 pero no FP10, podemos hacer la conversión de la imagen a JPG en local y luego subir el archivo (pongo un ejemplo en breve)
import flash.display.BitmapData;
urlo = "";////////////////////////////////////////////////////////////////////////////////////////////Esta es la función que se encarga de crear el objeto, "guardar los pixels" y mandarlosfunction Capturar(mc:MovieClip) {
//Muestro mi capa de progresoProgreso_mc._visible = true;
Progreso_mc.Cerrar_bt._visible = false;
//Creo el objeto bit map, del ancho y el alto del objeto que quiero guardar y dibujo este dentromcBitmap = new BitmapData(mc._width, mc._height, true, 0xFFFFFF);
mcBitmap.draw(mc);
//Actualizo el estado de progresoProgreso_mc.Texto_txt.text = "Guardando imagen...";
//Guardo en una matriz el valor de todos los pixelsvar cadena = new String();
for (var i = 1; i<=mc._height; i++) {
for (var j = 1; j<=mc._width; j++) {
cadena += ","+mcBitmap.getPixel(j, i).toString(16);
} } //Creo las variables para enviar y recibir del PHPenviarImagen = new LoadVars();
respuesta = new LoadVars();
//Al recibir los datos del PHP generadorrespuesta.onLoad = function(exito) {
//Si todo ha ido bienif (exito) {
//Actualizo el progreso y cargo en una nueva ventana la imagen generadaProgreso_mc.Texto_txt.text = "Imagen recibida";
Progreso_mc.Cerrar_bt._visible = true;
getURL(urlo+unescape(this.archivo), "_blank");
//Si algo ha fallado} else {
//Mensaje de errorProgreso_mc.Texto_txt.text = "Error al generar la imagen.";
Progreso_mc.Cerrar_bt._visible = true;
} }; //Almaceno en la variable a enviar los valores de los pixels, y el ancho y alto de la imagen enviarImagen.imagen = cadena;enviarImagen.ancho = mc._width;
enviarImagen.alto = mc._height;
//Actualizo el progresoProgreso_mc.Texto_txt.text = "Generando jpg...";
//Envio los datos de la imagenenviarImagen.sendAndLoad(urlo+"salvar.php",respuesta,"post");
}////////////////////////////////////////////////////////////////////////////////////////////Código del botón guardarGuardar_bt.onRelease = function() {
//Al pulsar guardar, invoco a la funcion Capturar pasando como parametro el clip que quiero "guardar"Capturar(Escena_mc);
};////////////////////////////////////////////////////////////////////////////////////////////Este es el código para hacer la "Pizarra". Muy sencilla, pero para el ejemplo vale.Escena_mc.onMouseDown = function() {
Escena_mc.Tiza_mc.lineStyle(3,"0x000000");
Escena_mc.Tiza_mc.moveTo(_xmouse,_ymouse);
Pintar = true;};Escena_mc.onMouseUp = function() {
Pintar = false;};Escena_mc.onEnterFrame = function() {
if (Pintar) {
Escena_mc.Tiza_mc.lineTo(_xmouse,_ymouse);
}};////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Progreso_mc._visible = false;
stop();
Y el php (sacado de google):
<?php //recibo las variables $ancho=$_POST["ancho"];
$alto=$_POST["alto"];
$pixels=explode(",",$_POST["imagen"]);
//$bg=$_POST["bg"]; //creamos la imagen $img = imagecreatetruecolor($ancho, $alto);
//creamos el color de fondo $bghex = 0xffffff;
while(strlen($bghex) < 6){
$bghex = "0" . $bghex;
} $r = hexdec(substr($bghex, 0, 2));
$g = hexdec(substr($bghex, 2, 2));
$b = hexdec(substr($bghex, 4, 2));
$color = imagecolorallocate($img, $r, $g, $b);
//rellenamos la imagen con el color de fondo imagefill($img, 0, 0, $color);
//pintamos cada uno de los pixeles: $x=0;
$y=0;
foreach($pixels as $key => $value) {
if($value!="") {
$hex = $value;
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));
$test = imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img, $x, $y, $test);
} $x++;
if($x>=$ancho) {
$x=0;
$y++;
} } //asignamos un numero unico para el nombre del archivo $string=md5(implode("",$pixels));
//el nombre del archivo a guardar $filename="images/$string.jpg";
//si el archivo no existe if(!file_exists($filename)) {
//lo guardamos imagepng($img, "$filename");
} //devolvemos a flash la ruta del archivo echo "archivo=$filename&";
?>
Buenas, lo primero decir que todos los códigos que están aquí posteados son originales. Es decir, que el código que ha posteado José en forosdelweb, se ha sacado de aquí, y no viceversa.
El salvar.php lo podéis bajar de aquí:
http://www.esedeerre.com/ejemplos/salvarfoto/salvar.rar