AfterEffect插件--常规功能开发--扭曲效果--js脚本开发--AE插件

1.扭曲算法

  AfterEffect(AE)插件是Adobe公司开发的特效制作软件,稳定快速的功能和特效,在视频制作领域使用非常广泛,本文向大家介绍如何在项目里进行扭曲效果功能。效果如下图所示:

在这里插入图片描述

  源代码如下所示:

function mAsO(cmd) {
    if (cmd == undefined) {
        cmd = "l"
    }
    var strScriptName = "扭曲效果";
    var strScriptVersion = "2.0";
    var strTrialUrl = "";
    var privateNum = 209010;
    var supportEmail = "";
    var trialLengthDays = 7;
    var trialLengthLaunches = 7;
    var offerUpgrade = false;
    var paidUpgrade = false;
    var retrieveUrl = "";
    var exchangeUrl = "";
    var betaMode = false;
    var betaExpiration = new Date(2013, 3, 1);
    if ($.os.indexOf("Mac") != -1) {
        var macBase64KeyStr = "";
}

function markBtn_OnClick() {
    app.beginUndoGroup("Mark / Unmark FX");
    myComp = app.project.activeItem;
    myLayer = myComp.selectedLayers[0];
    FX = new Array();
    for (var b = 1; b <= myLayer.Effects.numProperties; b += 1) {
        if (myLayer.Effects.property(b).selected == true) {
            FX.push(b);
        }
    }
    if (FX.length != 0) {
        for (var a = 0; a <= FX.length - 1; a += 1) {
            n = myLayer.Effects.property(FX[a]).name;
            if (n.substring(0, 1) == "(" && n.substring(n.length - 1, n.length) == ")") {
                myLayer.Effects.property(FX[a]).name = n.substring(1, n.length - 1);
            } else {
                myLayer.Effects.property(FX[a]).name = "(" + n + ")";
            }
        }
    } else {
        alert("Please select an Effect");
    }
    app.endUndoGroup();
}

function restoreBtn_OnClick() {
    app.beginUndoGroup("Restore FX");
    myComp = app.project.activeItem;
    myLayer = myComp.selectedLayers[0];
    myFX = myComp.selectedProperties[0];
    if (myFX == undefined || myFX.isEffect == false || myFX.name.substring(0, 12) != "Distortion f") {
        alert("Please select a \"Distortion from mapp\" effect");
    } else {
        num = myFX.name.substring(21, myFX.name.length);
        for (var a = 1; a <= app.project.numItems; a += 1) {
            if (app.project.item(a).name == ("BAO_mapp_" + myLayer.name + "_" + num)) {
                app.project.item(a).remove();
            }
        }
        for (m = myLayer.Masks.numProperties; m >= 1; m--) {
            if (myLayer.Masks.property(m).name.indexOf("Mapp " + num) != -1) {
                myLayer.Masks.property(m).remove();
            }
        }
        for (f = myFX.propertyIndex - 1; f >= 1; f--) {
            myLayer.Effects.property(f).enabled = true;
            if (myLayer.Effects.property(f).name.substring(0, 12) == "Distortion f") {
                f = 1;
            }
        }
        myFX.remove();
        for (fx = myLayer.Effects.numProperties; fx > 0; fx--) {
            if (myLayer.Effects.property(fx).name == ("Softness_" + num)) {
                myLayer.Effects.property(fx).remove();
            }
        }
    }
    app.endUndoGroup();
}

function invertBtn_OnClick() {
    app.beginUndoGroup("Invert Mask / Luma");
    myComp = app.project.activeItem;
    myMask = myComp.selectedProperties[0];
    myLayer = myComp.selectedLayers[0];
    if (myMask == undefined) {
        myLum = myComp.layer("Mapp_" + myLayer.name.substring(5, myLayer.name.length)).source.layer(myLayer.name);
        myLum.Effects.addProperty("ADBE Invert");
        if (myLum.Effects.numProperties == 2) {
            myLum.Effects.property(1).remove();
            myLum.Effects.property(1).remove();
        }
    } else {
        map = myMask.name.substring(5, 6);
        mask = myMask.name.substring(12, 13);
        if (myMask.inverted == true) {
            myMask.inverted = false;
        } else {
            myMask.inverted = true;
        }
        myComp.layer("Mapp_" + myLayer.name + "_" + map).source.layer("Mask").Masks.property("Mapp " + map + " Mask " + mask).inverted = myMask.inverted;
    }
    app.endUndoGroup();
}

function matteBtn_OnClick() {
    app.beginUndoGroup("Show / Hide Matte");
    myComp = app.project.activeItem;
    myLayer = myComp.selectedLayers[0];
    if (myLayer.name.substring(0, 5) == "Luma_" || myLayer.name.substring(0, 5) == "Mapp_") {
        num = myLayer.name.substring(myLayer.name.length - 1, myLayer.name.length);
        for (var l = 1; l <= myComp.numLayers; l += 1) {
            myComp.layer(l).selected = false;
            if (myComp.layer(l).name == myLayer.name.substring(5, myLayer.name.length - 2)) {
                myComp.layer(l).selected = true;
                myComp.layer(l).Effects.property("Distortion from mapp " + num).selected = true;
            }
        }
        myLayer = myComp.selectedLayers[0];
    }
    myFX = myComp.selectedProperties[0];
    if (myFX.isMask == true && myFX.name.substring(0, 5) == "Mapp ") {
        myFX = myLayer.Effects.property("Distortion from mapp " + myFX.name.substring(5, 6));
    }
    if (myFX == undefined || myFX.isEffect == false || myFX.name.substring(0, 12) != "Distortion f") {
        alert("Please select a \"Distortion from mapp\" effect");
    } else {
        num = myFX.name.substring(21, myFX.name.length);
        if (myLayer.enabled == true) {
            myLayer.enabled = false;
            myComp.layer("Mapp_" + myLayer.name + "_" + num).enabled = true;
            comp = myComp.layer("Mapp_" + myLayer.name + "_" + num).source;
            comp.layer("Luma_" + myLayer.name + "_" + num).enabled = true;
            comp.layer("Mask").enabled = false;
            comp.layer("Mask").enabled = false;
            comp.layer("Luma_" + myLayer.name + "_" + num).trackMatteType = TrackMatteType.ALPHA_INVERTED;
            black = comp.layers.addSolid([0, 0, 0], "Black", myLayer.width, myLayer.height, comp.pixelAspect, comp.duration);
            black.moveAfter(comp.layer("Luma_" + myLayer.name + "_" + num));
        } else {
            myLayer.enabled = true;
            myComp.layer("Mapp_" + myLayer.name + "_" + num).enabled = false;
            comp = myComp.layer("Mapp_" + myLayer.name + "_" + num).source;
            comp.layer("Luma_" + myLayer.name + "_" + num).enabled = false;
            comp.layer("Mask").enabled = true;
            comp.layer("Mask").enabled = true;
            comp.layer("Luma_" + myLayer.name + "_" + num).trackMatteType = TrackMatteType.NO_TRACK_MATTE;
            black = comp.layer("Black").remove();
        }
    }
    app.endUndoGroup();
}
var userinterface = buildUI(this);
if (userinterface != null && userinterface instanceof Window) {
    userinterface.show()
}
}

2.作者答疑

  代码长度过长,如需全部项目,请留言。


提示: 作者知了-联系方式1
提示: 作者知了-联系方式2

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容