将整个 Flash 文档另存为 JPEG 格式,以附件的形式通过电子邮件发送


Saving entire Flash document as JPEG to email as an attachment

我目前正在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", "your@company.com", $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,我可以很容易地实现。

我很乐意推荐使用带有airxmail框架的Adobe AIR发送到邮件。

这是一个网站: AirXmail

这是一份文档:AirXmail文档

您可以在位图数据上绘制舞台,并将该位图发送到php以进行邮件处理。

查看此站点以获取如何将as3显示对象另存为png的示例。

诀窍是使用位图数据中的绘制函数在位图数据上绘制舞台。然后将此位图数据发送到php,以便在附件中用于邮件目的。