【AS3】フラッシュ上で描いた絵を画像にしてサーバーにアップ
前回の続きで今回は描いた絵を画像ファイルに変換してサーバーにアップして見ます。
必要なもの
- FlashPlayer9.0.45.0以降
- Adobe Labsのas3corelibのJPGEncoderクラス
- ダウンロードはこちらからhttp://code.google.com/p/as3corelib/
- SVNリポジトリはこちらhttp://as3corelib.googlecode.com/svn/
サンプル
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

