【AS3】フラッシュ上で描いた絵を画像にしてサーバーにアップ

| | トラックバック(0)
前回の続きで今回は描いた絵を画像ファイルに変換してサーバーにアップして見ます。

必要なもの

サンプル

PHPはこんな感じです。
指定したフォルダのパーミッションを「757」にしておかないとパーミッションエラーが出る事があります。

<?php
$fileName = time()."-".round(rand(1,10000)).".jpg";
$fp = fopen("test/img/".$fileName, 'wb');
fwrite($fp, $GLOBALS['HTTP_RAW_POST_DATA']);
fclose($fp);
print $fileName;
?>
ソース
package  
{
	import com.adobe.images.JPGEncoder;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.display.Shape;
	import caurina.transitions.Tweener;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
	import flash.net.URLRequestMethod;
	import flash.text.TextField;
	import flash.net.URLStream;
	import flash.net.navigateToURL;
	
	public class DragAndDrop extends MovieClip{
	
		private var mc:*;
		private var x_old;
		private var y_old;
		private var m_on;
		private var g;
		private var shape;
		private var drawArea:DrawArea;
		private var jpgEncode:JPGEncoder;
		private var pngEncode:JPGEncoder;
		private var byteArray:ByteArray;
		private var _urlReq:URLRequest;
		private var _urlLoader:URLLoader;
		private var bmp_data:BitmapData;
		private var bmp:Bitmap;
		private var imgDir:String = "http://yourdomain/test/img/"; 
		private var phpPath:String = "http://yourdomain/encode.php";
		private var fileName:String;
	
		
		public function DragAndDrop(){
			init();
			x_old= stage.mouseX;
			y_old= stage.mouseY;
			m_on= false;
		}
		
		private function init():void {
			box_mc.buttonMode = true;
			box_mc.addEventListener(MouseEvent.MOUSE_DOWN, boxStartDrag);
			pen_mc.addEventListener(MouseEvent.CLICK, penClickHandler);
			reset_mc.addEventListener(MouseEvent.CLICK, resetAll);
			reset_mc.buttonMode = true;
			pen_mc.buttonMode = true;
			drawArea = new DrawArea();
			setBtn_mc.addEventListener(MouseEvent.CLICK, upload);
			setBtn_mc.buttonMode = true;
			addChild(drawArea);
		}
		
		private function boxStartDrag(e:MouseEvent):void {
			mc = new Box4();
			mc.x = stage.mouseX;
			mc.y = stage.mouseY;
			mc.startDrag();
			mc.alpha = 0.4;
			mc.buttonMode = true;
			drawArea.addChild(mc)
			mc.addEventListener(MouseEvent.MOUSE_UP, boxStopDrag);
			mc.addEventListener(MouseEvent.MOUSE_DOWN, mcStartDrag);
			mc.addEventListener(MouseEvent.MOUSE_MOVE, onMousemove);
			stage.removeEventListener(MouseEvent.MOUSE_DOWN,function(){m_on = true;});
			stage.removeEventListener(MouseEvent.MOUSE_UP,function(){m_on = false;});
			area_mc.removeEventListener(MouseEvent.MOUSE_MOVE, drawLine)
		}
		
		private function upload(e:MouseEvent):void {
			jpgEncode = new JPGEncoder(100);
			bmp_data = new BitmapData( 429, 538, true, 0x00fffffff);
			bmp_data.draw(drawArea);
			byteArray =  jpgEncode.encode(bmp_data);
			_urlReq = new URLRequest(phpPath);
			_urlLoader = new URLLoader();
			_urlReq.contentType = "application/octet-stream";
			_urlReq.method = URLRequestMethod.POST;
			_urlReq.data = byteArray;
			_urlLoader.load(_urlReq);
			_urlLoader.addEventListener(Event.COMPLETE, onUpload);
		}
		
		
		
		private function onMousemove(e:MouseEvent):void {
			e.updateAfterEvent();
		}
		
		private function onUpload(event:Event):void { 
			fileName = _urlLoader.data;  
			navigateToURL(new URLRequest(imgDir+fileName),"_blank");			
			complete_mc.x = 0;
			complete_mc.y = 0;
			stage.addChild(complete_mc)
			complete_mc.addEventListener(MouseEvent.CLICK, resetAll);
			complete_mc.buttonMode = true;
        }  
		
		private function boxStopDrag(e:MouseEvent):void { 
			var m:* = e.currentTarget;
			e.currentTarget.stopDrag();
			if (e.currentTarget.hitTestObject(area_mc)) {
				e.currentTarget.alpha = 1;
				
				drawArea.addChild(m)
			}else {
				
				drawArea.removeChild(m)
			}
			m.dropHandler();
			m.addEventListener(MouseEvent.MOUSE_MOVE, onMousemove);
			
		}
		
		private function mcStartDrag(e:MouseEvent):void {
			var mc2:MovieClip = e.currentTarget as MovieClip;
			e.currentTarget.startDrag();
			e.currentTarget.alpha = 0.4;
			drawArea.addChild(mc2)
			mc.addEventListener(MouseEvent.MOUSE_MOVE,onMousemove);
		}
		
		private function getNum():int {
			var num:int = Math.random() * 3
			return num
		}
		
		private function penClickHandler(e:MouseEvent):void {
			shape= new Shape();
			drawArea.addChild(shape);
			g= shape.graphics;
			g.lineStyle (5, 0x000000, 100);	
			stage.addEventListener(MouseEvent.MOUSE_DOWN,function(){m_on = true;});
			stage.addEventListener(MouseEvent.MOUSE_UP,function(){m_on = false;});
			area_mc.addEventListener(MouseEvent.MOUSE_MOVE,drawLine)
		}
		
		private function drawLine(e:MouseEvent){
			if(m_on){
				g.moveTo (x_old, y_old);
				g.lineTo (stage.mouseX, stage.mouseY);
			}
			x_old = stage.mouseX;
			y_old = stage.mouseY;
			
			};
		
		private function resetAll(e:MouseEvent):void {
			removeChild(drawArea)
			drawArea = new DrawArea();
			addChild(drawArea);
			complete_mc.x = -600;
		}
	}

}

ファイル一式はこちらからダウンロードできます。
flaァイル

トラックバック(0)

このブログ記事を参照しているブログ一覧: 【AS3】フラッシュ上で描いた絵を画像にしてサーバーにアップ

このブログ記事に対するトラックバックURL: http://alwaysfinetuning.com/mt/mt-tb.cgi/87

このブログ記事について

このページは、が2009年10月25日 13:37に書いたブログ記事です。

ひとつ前のブログ記事は「[AS3]IEでリロード時にStageのサイズの参照がでない。」です。

次のブログ記事は「【AIR】ドラッグアンドドロップの実験」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。