我目前正在Flash中創建一個用戶界面,以便在客戶可以爲其定製產品創建自己的設計的網站上。我們的想法是,我們希望他們能夠創建自己的設計並使用底部的表單,將設計保存爲JPEG並通過PHP將其附加到電子郵件中,從而將設計發送給我們。將整個Flash文檔保存爲JPEG,以附件形式發送電子郵件
有沒有任何可能的方法來做到這一點?
我目前正在Flash中創建一個用戶界面,以便在客戶可以爲其定製產品創建自己的設計的網站上。我們的想法是,我們希望他們能夠創建自己的設計並使用底部的表單,將設計保存爲JPEG並通過PHP將其附加到電子郵件中,從而將設計發送給我們。將整個Flash文檔保存爲JPEG,以附件形式發送電子郵件
有沒有任何可能的方法來做到這一點?
我認爲這是可能的。 首先,您將設計中的displayObject轉換爲您發送給php的byteArray。您可以使用imagecreatefromstring()函數創建圖像,請參閱:http://lv.php.net/imagecreatefromstring。
例AS3
public function displayObjectToPNG(displayObject:*, scale:Number = 1):ByteArray {
var bmpData:BitmapData=new BitmapData(displayObject.width, displayObject.height, true, 0xFFFFFF);
bmpData.draw(displayObject);
var byteArray:ByteArray = PNGEncoder.encode(bmpData);
return byteArray;
}
public function encodeFile(byteArray:ByteArray):Base64Encoder {
var base64:Base64Encoder = new Base64Encoder();
base64.encodeBytes(byteArray);
return base64;
}
public function saveFile(encodedFile:Base64Encoder, scriptLocation:String):void {
var data:URLVariables = new URLVariables();
data.fileData = encodedFile;
var request:URLRequest = new URLRequest(scriptLocation);
request.method = URLRequestMethod.POST;
request.data = data;
var loader:URLLoader= new URLLoader();
loader.addEventListener(Event.COMPLETE, function(e:Event):void {fileSaved(loader);});
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus);
loader.addEventListener(IOErrorEvent.IO_ERROR, ioError);
_fileSavesInProgress.push(loader);
try {
loader.load(request);
} catch (e:*) {
trace("an error occured of type", e);
}
}
實現這樣的(這是當用戶點擊該按鈕,你將執行代碼):
saveFile(encodeFile(displayObjectToPNG(sprite)), "http://www.your.domain/php/sendMail.php");
你的PHP文件將是這個樣子。
<?php
$png = imagecreatefromstring(base64_decode($fileData));
function mail_attachment($to, $subject, $message, $from, $file) {
$content = chunk_split($file);
$uid = md5(uniqid(time()));
$from = str_replace(array("\r", "\n"), '', $from); // to prevent email injection
$header = "From: ".$from."\r\n"
."MIME-Version: 1.0\r\n"
."Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"
."This is a multi-part message in MIME format.\r\n"
."--".$uid."\r\n"
."Content-type:text/plain; charset=iso-8859-1\r\n"
."Content-Transfer-Encoding: 7bit\r\n\r\n"
.$message."\r\n\r\n"
."--".$uid."\r\n"
."Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"
."Content-Transfer-Encoding: base64\r\n"
."Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"
.$content."\r\n\r\n"
."--".$uid."--";
return mail($to, $subject, "", $header);
}
mail_attachment("client", "subject", "your design", "[email protected]", $png);
請注意,我沒有測試過這個,但我認爲這將是非常接近,如果不是解決方案。 祝你好運!
[編輯]如果要實施該解決方案在一個函數中使用下面的AS3代碼:
public function sendSprite(sprite:Sprite, scriptLocation:String):void {
var bmpData:BitmapData=new BitmapData(sprite.width, sprite.height, true, 0xFFFFFF);
bmpData.draw(sprite);
var encodedFile:Base64Encoder = new Base64Encoder();
encodedFile.encodeBytes(PNGEncoder.encode(bmpData));
var data:URLVariables = new URLVariables();
data.fileData = encodedFile;
var request:URLRequest = new URLRequest(scriptLocation);
request.method = URLRequestMethod.POST;
request.data = data;
var loader:URLLoader= new URLLoader();
loader.addEventListener(Event.COMPLETE, spriteSend);
loader.addEventListener(Event.OPEN, traceEvent);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, traceEvent);
loader.addEventListener(IOErrorEvent.IO_ERROR, traceEvent);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, traceEvent);
loader.addEventListener(ProgressEvent.PROGRESS, traceEvent);
try {
loader.load(request);
} catch (e:*) {
trace("an error occured of type", e);
}
function traceEvent(e:*):void {
trace(e);
}
function spriteSend(e:Event):void {
trace(e, "\n sprite succesfully send \n");
}
}
如果您使用Adobe AIR,可以直接通過電子郵件發送到您的電子郵件域而無需PHP。
當我不知道PHP時,只使用flash(as3.0)和發送的電子郵件很難實現。但是,在不知道服務器端的情況下,比如使用Adobe Air的php,我可以很容易地實現。
我很樂意推薦使用Adobe AIR發送郵件與airxmail框架。
這是一個網站:airxmail
這是一個文件建立:airxmail documetation
你可以畫上一個BitmapData階段,發送位圖到PHP郵件的目的。
查看本網站的一個例子如何去做saving as3 displayobject as png。
訣竅是使用bitmapdata中的繪圖函數在bitmapdata上繪製舞臺。然後發送這個bitmapdata到PHP郵件用途的附件。
我認爲這僅僅是我後,我非常感謝你。當點擊提交按鈕時,我會如何着手繪製舞臺?這是迄今爲止按鈕的腳本; http://pastebin.com/CSBRh4jt – 2012-08-08 13:31:10
最簡單的方法是首先發送你的位圖數據/圖像,如果這個請求完成發送其餘的數據到mail.php,它將採取以前保存的圖像,併發送它。我會首先使用這個解決方案http://stackoverflow.com/questions/597947/,然後如果該請求完成發送其餘的數據到PHP。在PHP中,您可以將上傳的圖像添加爲附件 – automaticoo 2012-08-08 13:48:12
完美!非常感謝你。 – 2012-08-13 09:44:58
Pleasure :)我正在做一個類似的項目,但我似乎有一個不同的瓶頸:D。祝你的項目好運! – SKuijers 2012-08-13 10:10:26
我剛剛遇到一些問題,當我嘗試運行該程序時出現錯誤,因爲Flash(CS5.5)不允許我具有多個公用函數;我聽說這是一個相當近期的變化,我想知道你是否知道解決這個問題的方法?該項目非常接近完成,這或多或少是最後一步:) – 2012-08-22 11:25:12