2012-08-08 31 views
0

我目前正在Flash中创建一个用户界面,以便在客户可以为其定制产品创建自己的设计的网站上。我们的想法是,我们希望他们能够创建自己的设计并使用底部的表单,将设计保存为JPEG并通过PHP将其附加到电子邮件中,从而将设计发送给我们。将整个Flash文档保存为JPEG,以附件形式发送电子邮件

有没有任何可能的方法来做到这一点?

回答

1

我认为这是可能的。 首先,您将设计中的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"); 
    } 

}

+0

完美!非常感谢你。 – 2012-08-13 09:44:58

+0

Pleasure :)我正在做一个类似的项目,但我似乎有一个不同的瓶颈:D。祝你的项目好运! – SKuijers 2012-08-13 10:10:26

+0

我刚刚遇到一些问题,当我尝试运行该程序时出现错误,因为Flash(CS5.5)不允许我具有多个公用函数;我听说这是一个相当近期的变化,我想知道你是否知道解决这个问题的方法?该项目非常接近完成,这或多或少是最后一步:) – 2012-08-22 11:25:12

1

如果您使用Adobe AIR,可以直接通过电子邮件发送到您的电子邮件域而无需PHP。

当我不知道PHP时,只使用flash(as3.0)和发送的电子邮件很难实现。但是,在不知道服务器端的情况下,比如使用Adobe Air的php,我可以很容易地实现。

我很乐意推荐使用Adobe AIR发送邮件与airxmail框架。

这是一个网站:airxmail

这是一个文件建立:airxmail documetation

1

你可以画上一个BitmapData阶段,发送位图到PHP邮件的目的。

查看本网站的一个例子如何去做saving as3 displayobject as png

诀窍是使用bitmapdata中的绘图函数在bitmapdata上绘制舞台。然后发送这个bitmapdata到PHP邮件用途的附件。

+0

我认为这仅仅是我后,我非常感谢你。当点击提交按钮时,我会如何着手绘制舞台?这是迄今为止按钮的脚本; http://pastebin.com/CSBRh4jt – 2012-08-08 13:31:10

+0

最简单的方法是首先发送你的位图数据/图像,如果这个请求完成发送其余的数据到mail.php,它将采取以前保存的图像,并发送它。我会首先使用这个解决方案http://stackoverflow.com/questions/597947/,然后如果该请求完成发送其余的数据到PHP。在PHP中,您可以将上传的图像添加为附件 – automaticoo 2012-08-08 13:48:12

相关问题