Actionscript 如何创建一个;倒计时器“;GIF?

Actionscript 如何创建一个;倒计时器“;GIF?,actionscript,photoshop,animated-gif,countdowntimer,Actionscript,Photoshop,Animated Gif,Countdowntimer,我想创建一个倒计时60秒的GIF。我可以使用photoshop,但不想为每个数字创建新图层 我正在寻找一种方法来自动生成一个从60倒计时到0的GIF(或我可以在事后组合成GIF的图像) 我将接受任何符合这些要求的答案。我将此航空代码作为教育练习发布给读者。基本思想是使用ActionScript通过Sprite中的文本字段clas渲染文本,使用Flash的功能将任何DisplayObject渲染为静态位图数据,然后使用第三方开源库将每个渲染帧转换为gif 注意:您可以将每个位图数据帧保存到一个文件

我想创建一个倒计时60秒的GIF。我可以使用photoshop,但不想为每个数字创建新图层

我正在寻找一种方法来自动生成一个从60倒计时到0的GIF(或我可以在事后组合成GIF的图像)


我将接受任何符合这些要求的答案。

我将此航空代码作为教育练习发布给读者。基本思想是使用ActionScript通过
Sprite
中的
文本字段
clas渲染文本,使用Flash的功能将任何DisplayObject渲染为静态位图数据,然后使用第三方开源库将每个渲染帧转换为gif

注意:您可以将每个位图数据帧保存到一个文件中,以便使用外部gif创建工具

包{
导入flash.display.BitmapData;
导入flash.display.Sprite;
导入flash.utils.ByteArray;
导入flash.text.TextField;
导入flash.text.TextFormat;
导入flash.filesystem.File;
导入flash.filesystem.FileStream;
导入flash.filesystem.FileMode;
导入org.bytearray.gif.encoder.gif编码器;
导入org.bytearray.gif.player.GIFPlayer;
公共类Main扩展了Sprite{
var defaultFormat:TextFormat=newtextformat();
变量背景:Sprite=新Sprite();
var countdownText=新文本字段();
变量fsize:int=125;
var xsize:int=100;
变量:int=100;
公共函数Main():void{
defaultFormat.font=“Arial”;
defaultFormat.size=fsize;
defaultFormat.color=0xffffff;
var编码器:GIFEncoder=新的GIFEncoder();
编码器.setRepeat(0);
编码器。设置延迟(1000);
encoder.start();
设置计数器显示();
var startFrom:uint=60;
var startColor:uint=255;
对于(变量i:int=startFrom;i>-1;i--){
var colorRGB:uint=(起始颜色/startFrom)*i;

addFrame(createCounterDisplay(i),(colorRGB)真是太棒了,这正是我要找的东西。谢谢!
package {

    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.utils.ByteArray;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.filesystem.File;
    import flash.filesystem.FileStream;
    import flash.filesystem.FileMode;

    import org.bytearray.gif.encoder.GIFEncoder;
    import org.bytearray.gif.player.GIFPlayer;

    public class Main extends Sprite {

        var defaultFormat:TextFormat = new TextFormat();
        var background:Sprite = new Sprite();
        var countdownText = new TextField();
        var fsize:int = 125;
        var xsize:int = 100;
        var ysize:int = 100;

        public function Main():void {
            defaultFormat.font = "Arial";
            defaultFormat.size = fsize;
            defaultFormat.color = 0xffffff;

            var encoder:GIFEncoder = new GIFEncoder();
            encoder.setRepeat(0);
            encoder.setDelay(1000);
            encoder.start();

            setupCounterDisplay();
            var startFrom:uint = 60;
            var startColor:uint = 255;
            for (var i:int = startFrom; i > -1; i--) {
                var colorRGB:uint = (startColor / startFrom) * i;
                encoder.addFrame(createCounterDisplay(i, ( colorRGB << 16 ) | ( colorRGB << 8 ) | colorRGB ) );
            }
            encoder.finish();
            removeChild(background);
            saveGIF("CounterDown.gif", encoder.stream);
            playGIF(encoder.stream);
        }

        private function playGIF(data:ByteArray):void {
            data.position = 0;
            var player:GIFPlayer = new GIFPlayer();
            player.loadBytes(data);
            addChild(player);
        }

        private function saveGIF(fileName:String, data:ByteArray):void {
            var outFile:File = File.desktopDirectory;
            outFile = outFile.resolvePath(fileName);
            var outStream:FileStream = new FileStream();
            outStream.open(outFile, FileMode.WRITE);
            outStream.writeBytes(data, 0, data.length);
            outStream.close();
        }

        private function padString(string:String, padChar:String, finalLength:int, padLeft:Boolean = true):String {
            while (string.length < finalLength) {
                string = padLeft ? padChar + string : string + padChar;
            }
            return string;
        }

        private function setupCounterDisplay():void {
            var xsize:int = 100;
            var ysize:int = 100;
            background.graphics.beginFill(0x000000, 1);
            background.graphics.drawCircle(xsize, ysize, ysize);
            background.graphics.endFill();
            countdownText.defaultTextFormat = defaultFormat;
            countdownText.border = true;
            countdownText.borderColor = 0xff0000;
            background.addChild(countdownText);
            this.addChild(background);
        }

        private function createCounterDisplay(num:int, color:uint):BitmapData {
            background.graphics.beginFill(0x000000, 1);
            background.graphics.drawCircle(xsize, ysize, ysize);
            background.graphics.endFill();
            defaultFormat.color = color;
            countdownText.defaultTextFormat = defaultFormat;
            countdownText.text = padString(num.toString(), "0", 2);
            countdownText.autoSize = "center";
            countdownText.x = countdownText.width / 5;
            countdownText.y = countdownText.height / 5;
            var bitmap:BitmapData = new BitmapData(countdownText.width * 1.5, countdownText.height * 1.5, true);
            bitmap.draw(background);
            return bitmap;
        }
    }
}