A couple of guys on Twitter asked me if I would write-up how I generate PNG files from MovieClips in my SWF, at run-time. So I put this example together and am sharing it here.
We use this technique in our virtual world WebbliWorld to save a PNG version of the users avatars after they have customised them. But there are all kinds of other reasons you may need this. My example includes two methods: Saving the PNG locally using the local file system, and Saving the PNG to a web server using AMFPHP.
This technique requires Flash Player 10 and the Adobe AS3 Core Lib.
Here’s a very simple example (included in the zip download below):
Essentially it all boils down to this:
1) When you are ready to save your image, create a Bitmap version of your MovieClip.
private function getMovieClipAsBitmap():Bitmap
var bounds:Rectangle = theMovieClip.getBounds(theMovieClip);
// The * 2 is because we’re scaling the clip up by a factor of two, to result in a larger PNG
// If you don’t need this, remove it and comment out the m.scale call below
var theBitmap:Bitmap = new Bitmap(new BitmapData(bounds.width * 2, bounds.height * 2, true, 0×0));
var m:Matrix = new Matrix(1, 0, 0, 1, -bounds.x, -bounds.y);
// Simply scale the matrix to make a bigger PNG. Here we are doubling it. Comment this out if you don’t need it.
// Need to crop the PNG to a given size? Pass it a Rectangle as the 5th parameter to draw()
//var r:Rectangle = new Rectangle(0, 0, 50, 40);
theBitmap.bitmapData.draw(theMovieClip, m, null, null, null, true);
2) Convert this Bitmap to a ByteArray.
private function getMovieClipAsByteArrayPNG():ByteArray
var data:Bitmap = getMovieClipAsBitmap();
var ba:ByteArray = PNGEncoder.encode(data.bitmapData);
3) Send this ByteArray to either the local filesystem, or AMFPHP.
// Uses FileReference to save the PNG locally to the hard drive (see “saveToServer” for an alternative)
private function saveLocalPNG(event:MouseEvent):void
var ba:ByteArray = getMovieClipAsByteArrayPNG();
Complete source code is included in the zip file including an AMFPHP PHP script for saving on a web server.
Hope someone finds this useful.
10 ResponsesLeave a comment
Make yourself heard
All about Photon Storm and our
HTML5 game development services
- Phaser 1.1.4 ("Kandor") released. Check out the new features and roadmap.
- Phaser games in Ludum Dare 28
- Advanced Phaser and TypeScript Projects
- How to use Phaser with TypeScript
- Tutorial: Making your first Phaser game
- Phaser 1.1.3 "Arafel" has landed with a shadery splash
- My HTML5 Game Development In-depth session at the Montreal International Games Summit 2013
- Phaser 1.1 is released! New API docs, 150+ examples and hundreds of updates
- Phaser 1.0 and the journey we took to get there
- Wide-eyed, quacky, flappy, pre-school adventures!
Filter our Content
- Cool Links
- Flash Game Dev Tips
- Game Development
- Geek Shopping
- In the Media