2011-05-25 114 views
4

我必须将MovieClip转换为ByteArray并使用POST方法将其发送到php。处理php的人说,只有ByteArray需要发送和转换为JPG和PNG可以从PHP端完成。当我建立保存在本地机器上的选项时,使用了以下步骤。将MovieClip转换为ByteArray

  1. 转换为位图数据
  2. 使用JPGEncoder和包括PNGEncoder上的BitmapData
  3. 然后assiging到字节数组变量。

所以在这种情况下,不同的字节数组被用于保存JPG和PNG的情况下,它的工作。

我发现代码转换的动画片段,以#1字节组本身

AS3: Export a MovieClip or Canvas to swf

var buffer:ByteArray = new ByteArray(); 
buffer.writeObject(MOVIE_CLIP_HERE); 
buffer.position = 0; 
buffer.writeBytes(...); 

应该是什么缓冲区对象的writeBytes函数的参数。假设movieclip的名称是canvas_mc。

我已经想出了PHP的一部分。提前致谢。

+0

'writeObject(MovieClip)'将使用AMF序列化您的剪辑,如果服务器想要捕获图像,PHP将难以处理。 – 2011-05-25 08:09:23

回答

5

不要使用ByteArray.writeObject()和解析MovieClip ..

您需要使用bitmapData.getPixels()返回一个ByteArray代表你的位图的像素。

这里有一个简单的例子:

const WIDTH:uint = 100; 
const HEIGHT:uint = 100; 

var rect:Rectangle = new Rectangle(0,0,WIDTH,HEIGHT); 

// create BitmapData 
var bmd:BitmapData = new BitmapData(WIDTH,HEIGHT,true,0); 
bmd.draw(YOUR_MOVIE_CLIP); 

// your byte array 
var ba:ByteArray = bmd.getPixels(rect); 
trace(ba.length); 

基本上你想要做的是使用BitmapData.draw()让你的影片剪辑的图形,并存储为ByteArray。

+0

+1对于getPixels(),但我发现这个例子令人困惑,因为它在“绘制平方”中花费了很多时间。不是不正确的,只是不相关的问题(为什么不fillRect,无论如何?)。 – 2011-05-25 08:11:18

+0

没错,我会简化这个例子。实际上我不知道它以某种方式逃脱了我的想法:s – Marty 2011-05-25 08:12:46