0

私は現在、クライアントがオーダーメイド製品の独自のデザインを作成できる Web サイトにアクセスするためのユーザー インターフェイスをフラッシュで作成しています。アイデアは、彼らがデザインを作成し、下部のフォームを使用して、デザインを jpeg として保存し、PHP を介して電子メールに添付して送信できるようにすることです。

これを行う方法はありますか?

4

3 に答える 3

1

Adobe AIRを使用している場合は、PHPを使用せずに電子メールドメインに直接電子メールを送信できます。

PHPを知らなかったときは、flash(as3.0)と送信された電子メールだけを使用して実装するのは非常に困難でした。ただし、Adobe Airを使用したphpなどのサーバー側を知らなくても、簡単に実装できます。

AirxmailフレームワークでAdobeAIRsendtomailを使用することをお勧めします。

これはサイトです:airxmail

これはドキュメントです:airxmailのドキュメント

于 2012-08-08T12:42:20.053 に答える
1

ビットマップデータにステージを描画し、そのビットマップをメール目的で php に送信できます。

as3 displayobject を png として保存する方法の例については、このサイトを確認してください。

トリックは、bitmapdata の draw 関数を使用して、bitmapdata にステージを描画することです。次に、このビットマップデータをメール目的で添付ファイルとして php に送信します。

于 2012-08-08T13:23:07.767 に答える
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", "your@company.com", $png);

これをテストしていないことに注意してください。ただし、解決策ではないにしても、これは非常に近いと思います。幸運を!

[編集] このソリューションを 1 つの関数に実装する場合は、次の 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");
  }

}

于 2012-08-08T13:45:47.197 に答える