我目前正在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