扭曲效果是视频特效中的常用功能。下面介绍一种常用的脚本开发方法,以下功能仅用于学习交流,请勿用于非法用途和商业用途,源代码如下所示:
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 = ""
});
var strExpiredAlert = localize({
en: "Sorry, this trial version of the script has expired. \nYou can purchase a license at " + strTrialUrl + "\n\nWould you like to go there now?",
de: "Die Testversion des Skriptes ist leider abgelaufen.\nDu kannst unter " + strTrialUrl + " eine Lizenz erwerben.\n\nMöchtest Du jetzt dorthin gehen?",
fr: "Désolé, la période d'essai du script a expirée. \nPour acheter une licence, veuillez vous rendre sur la page " + strTrialUrl + "\n\nVoulez-vous ouvrir cette page maintenant ?"
});
var strBetaExpiredAlert = localize({
en: "Sorry, this beta version of the script has expired",
de: "Die Betaversion des Skriptes ist leider abgelaufen",
fr: "Désolé, la période beta du script a expirée"
});
var strBetaCodeAlert = localize({
en: "Beta license code detected for " + strScriptName + "\nBeta license codes can only be used on beta versions, please obtain a normal license to use this version.",
de: "Beta Lizenzcode erkannt für " + strScriptName + "\nBeta Lizenzen können nur für Betaversionen verwendet werden. Bitte verwende eine normale Lizenz für diese Version.",
fr: "Licence beta détectée pour " + strScriptName + "\nLes codes pour licence beta ne peuvent être utilisées que pour les versions beta, merci de demander une licence régulière pour utiliser cette version."
});
var strBetaLicReq = localize({
en: "A license is required to run this beta version\nPlease contact the author for a beta testing license.",
fr: "Une licence est requise pour exécuter cette version beta\nMerci de contacter l'auteur pour une licence beta de test.",
de: "Für diese Betaversion wird eine Lizenz benötigt.\nBitte kontaktiere den Autor für eine Betatester-Lizenz."
});
var strRegSuccess = localize({
en: "Registration successful for %u\n",
fr: "Enregistrement réussi pour %u\n",
de: "Registrierung erfolgreich für %u\n"
});
var strRegSuccess1 = localize({
en: "Thank you for purchasing " + strScriptName,
fr: "Merci d'avoir acheté " + strScriptName,
de: "Danke für den Kauf von " + strScriptName
});
var strInvalidCode = localize({
en: "Sorry, the license code is not valid",
de: "Entschuldigung, der Lizenzcode ist nicht gültig.",
fr: "Désolé, ce numéro de licence n'est pas valide."
});
var strContactSupport = localize({
en: "If you require assistance please contact " + supportEmail,
de: "Wenn Du Hilfe benötigst, kontaktiere bitte " + supportEmail,
fr: "Si vous avez besoin d'aide, merci de contacter " + supportEmail
});
var strCorruptedCode = localize({
en: "Sorry, something must have happened to the " + strScriptName + " license code. Please re-enter it at the prompt.\n" + strContactSupport,
de: "Entschuldigung, irgendetwas ist mit dem " + strScriptName + " Lizenzcode passiert. Bitte gebe ihn erneut ein.\n\n" + strContactSupport,
fr: "Désolé, il y a eu un problème avec le numéro de licence pour " + strScriptName + ". Merci de bien vouloir le saisir de nouveau.\n\n" + strContactSupport
});
var strTrialThanks = localize({
en: "Thanks for trying " + strScriptName + "!",
de: "Danke, dass Du " + strScriptName + " ausprobierst!",
fr: "Merci d'avoir essayé " + strScriptName + "!"
});
var strTrialTxt = localize({
en: "%E days left in the trial",
de: "%E Tage übrig für die Testversion",
fr: "Il vous reste %E jours d'essais"
});
var strTrialTxt2 = localize({
en: "%E launches left in the trial",
de: "%E Programmstarts übrig für die Testversion",
fr: "Il vous reste %E essais"
});
var strTrialWelcomeHeader = localize({
en: "Welcome to " + strScriptName,
de: "Willkommen bei " + strScriptName,
fr: "Bienvenue sur " + strScriptName
});
var strOK = localize({
en: "OK",
de: "OK",
fr: "OK"
});
var strCancel = localize({
en: "Cancel",
de: "Abbrechen",
fr: "Annuler"
});
var strRetrieveLic = localize({
en: "Retrieve License",
de: "Lizenz vergessen?",
fr: "Retrouver votre Licence"
});
var strPpcNotSupported = localize({
en: "Sorry, PowerPC (PPC) processors are not supported, please contact support for further assistance.",
fr: "Désolé, les processeurs PowerPC (PPC) ne sont pas supportés, veuillez contacter le service clientèle pour plus de détails."
});
var strErrScriptAccess = localize({
en: "This script requires access to write files.\nGo to the \"General\" panel of the application preferences and make sure \"Allow Scripts to Write Files and Access Network\" is checked.",
de: "Dieses Skript benötigt die Erlaubnis Dateien zu schreiben.\n Gehe in Voreinstellungen von After Effects in die Rubrik \"Allgemein\" und aktiviere die Option \"Skripten können Dateien schreiben und haben Netzwerkzugang\".",
fr: "Ce script nécessite les droits d'écriture de fichiers.\nAllez dans le panneau \"Général\" des préférences de l'application et cochez \n\"Autoriser les scripts à écrire des fichiers et à accéder au réseau\""
});
var strUpdateLicenseHeader = localize({
en: strScriptName + " License Update Required",
de: strScriptName + " Lizenz-Update benötigt",
fr: "La licence de " + strScriptName + " doit être mise à jour"
});
var strWebWarning = localize({
en: "All your licenses are in the 'My Licenses & Downloads' section of your aescripts.com user account.\n\nUser accounts are part of the new aescripts.com. If you have not created an account yet, create a new account using the same email address you used for the original purchase and your order history will be imported.\n\nWould you like to go there now?",
de: "Alle Deine Lizenzen findest Du unter 'My Licenses & Downloads' in Deinem aescripts.com Benutzer-Account.\n\nBenutzer-Accounts sind Teil des neuen aescripts.com. Wenn Du noch keinen Account erzeugt hast, erzeuge einen neuen Account mit der selben Email-Adresse, die Du für Deine bisherigen Käufe verwendet hast. Diese weden dann automatisch importiert.\n\nWillst Du jetzt dorthin gehen?",
fr: "Toutes vos licences se trouvent dans la section 'My Licenses & Downloads' de votre compte utilisateur sur aescripts.com.\n\nLes comptes d'utilisateurs font partie de la nouvelle version de aescripts.com. Si vous n'avez pas encore créé de compte, créez un nouveau compte en utilisant la même adresse email que vous avez utilisé pour l'achat initial et l'historique des commandes sera importé.\n\nVoulez-vous y aller maintenant?"
});
var strUpdateLicenseHdr = paidUpgrade ? localize({
en: "Looks like you have an old license number. " + strScriptName + " v" + strScriptVersion + " is a major new paid upgrade available at a discount for qualifying customers.",
de: "Anscheinend hast Du eine alte Lizenz-Nummer. " + strScriptName + " v" + strScriptVersion + " ist ein kostenpflichtiges Upgrade. Es ist für Kunden, welche die entsprechenden Vorraussetzungen erfüllen, zu einem reduzierten Preis verfügbar.",
fr: "Il semblerait que vous disposiez d'un ancien numéro de licence. " + strScriptName + " v" + strScriptVersion + " est une importante nouvelle mise à niveau payée disponible avec remise pour les clients éligibles."
}) : localize({
en: "Looks like you have an old license number. " + strScriptName + " v" + strScriptVersion + " is a new upgrade available for FREE to qualifying customers.",
de: "Anscheinend hast Du eine alte Lizenz-Nummer. " + strScriptName + " v" + strScriptVersion + " ist ein neues Upgrade. Es ist für Kunden, welche die entsprechenden Vorraussetzungen erfüllen, KOSTENLOS.",
fr: "Il semblerait que vous disposiez d'un ancien numéro de licence. " + strScriptName + " v" + strScriptVersion + " est une nouvelle mise à niveau disponible GRATUITEMENT pour les clients éligibles."
});
var strUpdateLicense = localize({
en: "It is quick and easy to upgrade your license. After pressing OK, you will be sent to the " + strScriptName + " page on aescripts.com. Login or create a new account to see if you qualify for an upgrade. " + "Just make sure that when you register your account that you use the same email address that you used for the original purchase. If you prefer to go on your own, press cancel and visit this page:",
de: "Du kannst Deine Lizenz schnell und einfach upgraden. Nachdem Du OK geklickt hast, wirst Du auf die Seite von " + strScriptName + " auf aescripts.com weitergeleitet. Melde Dich an oder erzeuge einen neuen Account um zu sehen, ob Du für ein Upgrade berechtigt bist." + "Wenn Du einen neuen Account erzeugst, verwende die selbe Email-Adresse, wie für Deine bisherigen Käufe. Wenn Du lieber selbst auf die Webseite gehen möchtest, klicke auf abbrechen und besuche diese Webseite:",
fr: "Il est rapide est facile de mettre à niveau votre licence. Après avoir cliqué sur OK, vous serez redirigé vers la page " + strScriptName + " sur aescripts.com. Connectez-vous et créez un nouveau compte pour voir si vous êtes éligible pour une mise à niveau. " + "Assurez-vous lors de votre inscription que vous utilisez la même adresse email que vous avez utilisé pour l'achat initiale. Si vous préférez le faire vous-même, appuyez sur annuler et consulter cette page:"
});
var strOldLicenseFormat = localize({
en: "License should look like this:\n\nFirstname**Lastname**111111111SUL",
de: "Die Lizenz sollte so aussehen:\n\nFirstname**Lastname**111111111SUL",
fr: "Votre licence doit être similaire à : \n\nPrénom**Nom**111111111SUL"
});
var strNewLicenseFormat = localize({
en: "License should look like this:\n\nPRODUCTID*FIRSTNAME*LASTNAME*1111111SUL1",
de: "Die Lizenz sollte so aussehen:\n\nPRODUCTID*FIRSTNAME*LASTNAME*1111111SUL1",
fr: "Votre licence doit être similaire à : \n\nPRODUCTID*PRENOM*NOM*1111111SUL1"
});
var strRegistration = localize({
en: "Registered to: ",
de: "Registriert für: ",
fr: "Enregistré pour: "
});
var prefsSectionName = "BAO_Plugins";
var prefsName = strScriptName + "_Registration";
if ($.os.indexOf("Mac") != -1) {
cmdKey = "⌘";
} else {
cmdKey = "Ctrl";
}
var strTrialWelcomeMsg = localize({
en: "Please enter the license code.",
de: "Bitte gebe den Lizenzcode ein.",
fr: "Veuillez entrer votre numéro de licence."
});
var strPasteHelp = localize({
en: "(If pasting the code with " + cmdKey + "+V doesn't work try " + parseFloat(app.version) >= 10 ? "Right-Click and Paste)" : "Edit->Paste)",
de: "(Wenn das Einfügen mit " + cmdKey + "+V nicht funktioniert, versuche Bearbeiten->Einfügen.)",
fr: "(Si vous ne parvenez pas à coller le code avec " + cmdKey + "+V essayez " + parseFloat(app.version) >= 10 ? "Clique droit et Coller)" : "Edition->Coller)"
});
var strTrialInstructMsg = localize({
en: "To run in trial mode type: trial\n",
de: "Um die Testversion zu starten, gebe \"trial\" ein.",
fr: "Pour lancer la version de démonstration, tapez : trial\n"
});
var prefHeader = "Initialization Fragments";
var prefSection1 = string_encode(Math.floor(parseFloat(app.version)).toString().charAt(Math.max(0, Math.floor(parseFloat(app.version)).toString().length - 1)) + strScriptName.substring(Math.max(0, strScriptName.length - 15), strScriptName.length) + strScriptVersion) * privateNum * 0.457.toString(36);
var prefSection2 = string_encode(Math.floor(parseFloat(app.version)).toString().charAt(Math.max(0, Math.floor(parseFloat(app.version)).toString().length - 1)) + strScriptName.substring(Math.max(0, strScriptName.length - 15), strScriptName.length) + strScriptVersion) * (privateNum / 3.981).toString(36);
function licUI() {
var licPal = new Window("dialog", strTrialWelcomeHeader, undefined, {
resizeable: true
});
if (licPal != null) {
var res = "group { \n\t\t\t\torientation: 'column', \n\t\t\t\talignment: ['fill','fill'], \n\t\t\t\talignChildren: ['fill','fill'], \n\t\t\t\t\tinfoGrp: Group { \n\t\t\t\t\talignment: ['fill','top'], \n\t\t\t\t\talignChildren: ['fill','fill'], \n\t\t\t\t\torientation: 'column', \n\t\t\t\t\t\thdrGrp: Group {\n\t\t\t\t\t\t\ttxt: StaticText {}, \n\t\t\t\t\t\t\tpaste: StaticText {}, \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrial: StaticText {}, \n\t\t\t\t\t} \n\t\t\t\t\tlicGrp: Group { \n\t\t\t\t\t\ttxt: EditText {alignment: ['fill','fill'], properties:{multiline:false}}, \n\t\t\t\t\t} \n\t\t\t\t\tokGrp: Group { \n\t\t\t\t\talignment: ['fill','bottom'], \n\t\t\t\t\talignChildren: ['fill','fill'], \n\t\t\t\t\t\tretrieveReg: Button {text:'" + strRetrieveLic + "', alignment: ['left','center'],preferredSize:[150,30]}\n\t\t\t\t\t\tcancelBtn: Button {text:'" + strCancel + "', preferredSize:[150,30], alignment: ['right','center']} \n\t\t\t\t\t\tokBtn: Button {text:'" + strOK + "', preferredSize:[150,30], alignment: ['right','center']} \n\t\t\t\t\t} \n\t\t\t\t}";
licPal.grp = licPal.add(res);
var boldFont = ScriptUI.newFont("dialog || palette", ScriptUI.FontStyle.BOLD, 12);
var smallFont = ScriptUI.newFont("dialog || palette", ScriptUI.FontStyle.REGULAR, 9);
licPal.grp.licGrp.txt.preferredSize = [600, 30];
licPal.grp.infoGrp.hdrGrp.txt.text = strTrialWelcomeMsg;
licPal.grp.infoGrp.hdrGrp.txt.graphics.font = boldFont;
licPal.grp.infoGrp.hdrGrp.paste.text = strPasteHelp;
licPal.grp.infoGrp.hdrGrp.paste.graphics.font = smallFont;
licPal.grp.infoGrp.trial.text = betaMode ? "" : strTrialInstructMsg;
licPal.grp.licGrp.txt.text = betaMode ? "" : "BAODS*MONTER*GROUP©*1001193SUL9";
licPal.grp.okGrp.retrieveReg.visible = !betaMode;
licPal.grp.okGrp.retrieveReg.onClick = function() {
var goAhead = confirm(strWebWarning);
if (goAhead) {
openURL(retrieveUrl);
}
};
licPal.grp.okGrp.cancelBtn.onClick = function() {
licPal.close(false);
};
licPal.grp.okGrp.okBtn.onClick = function() {
var license = licPal.grp.licGrp.txt.text.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode(license));
app.preferences.saveToDisk();
licPal.close(true);
};
licPal.layout.layout(true);
licPal.layout.resize();
licPal.onResizing = licPal.onResize = function() {
this.layout.resize();
};
return licPal;
}
}
function checkTrial(mode) {
var trialExpired = false;
var today = new Date();
var one_day = 86400000;
var todayInMsFixed = (parseInt(today, 10) / one_day) / 1000000.toFixed(6);
if (app.settings.haveSetting(prefHeader, prefSection1)) {
trialStartDate = parseInt(app.settings.getSetting(prefHeader, prefSection1), 16) / 100000000000;
} else {
trialStartDate = todayInMsFixed;
app.settings.saveSetting(prefHeader, prefSection1, trialStartDate * 100000000000.toString(16));
}
if (app.settings.haveSetting(prefHeader, prefSection2)) {
launchCount = Math.max(1, parseInt(app.settings.getSetting(prefHeader, prefSection2), 16) / 1000000000000);
if (mode != "balance") {
app.settings.saveSetting(prefHeader, prefSection2, (launchCount + 1) * 1000000000000.toString(16));
}
} else {
launchCount = 1;
app.settings.saveSetting(prefHeader, prefSection2, launchCount * 1000000000000.toString(16));
}
app.preferences.saveToDisk();
var trialLengthSoFar = Math.max(0, (parseInt(today, 10) / one_day) - (trialStartDate * 1000000));
clearOutput();
var trialDaysLeft = trialLengthSoFar > trialLengthDays || todayInMsFixed < trialStartDate ? 0 : Math.ceil(trialLengthDays - trialLengthSoFar);
var launchesLeft = Math.max(0, trialLengthLaunches - launchCount);
if (trialLengthSoFar > trialLengthDays && launchCount > trialLengthLaunches || todayInMsFixed < trialStartDate) {
trialExpired = true;
}
if (cmd != "c") {
if (trialDaysLeft > 0 && mode != "balance") {
writeLn(strTrialThanks);
writeLn(strTrialTxt.replace(/%E/g, trialDaysLeft));
} else {
if (!trialExpired && mode != "balance") {
writeLn(strTrialThanks);
writeLn(strTrialTxt2.replace(/%E/g, launchesLeft));
}
}
}
if (mode == "balance") {
return trialDaysLeft;
} else {
return trialExpired;
}
}
function checkBeta(betaExpDate) {
var betaExpired = false;
var today = new Date();
var one_day = 86400000;
var todayInMs = parseInt(today, 10) / one_day;
var betaExpInMs = parseInt(betaExpDate, 10) / one_day;
if (todayInMs > betaExpInMs) {
betaExpired = true;
}
return betaExpired;
}
function updateLicenseUI(reg) {
var updPal = new Window("dialog", strUpdateLicenseHeader, undefined, {
resizeable: false
});
if (updPal != null) {
var res = "group { \n\t\t\t\torientation: 'column', \n\t\t\t\talignment: ['fill','fill'], \n\t\t\t\talignChildren: ['fill','fill'], \n\t\t\t\t infoGrp: Group { \n\t\t\t\t alignment: ['fill','top'], \n\t\t\t\t alignChildren: ['fill','fill'], \n\t\t\t\t orientation: 'column', \n\t\t\t\t\t hdr: StaticText {}, \n\t\t\t\t\t info: StaticText {preferredSize:[800,40], properties:{multiline:true}}, \n\t\t\t\t\t url: StaticText {}, \n\t\t\t\t\t} \n\t\t\t\t\tokGrp: Group { \n\t\t\t\t\talignment: ['fill','bottom'], \n\t\t\t\t\talignChildren: ['fill','fill'], \n\t\t\t\t\t\tcancelBtn: Button {text:'" + strCancel + "', preferredSize:[150,30], alignment: ['right','center']} \n\t\t\t\t\t\tokBtn: Button {text:'" + strOK + "', preferredSize:[150,30], alignment: ['right','center']} \n\t\t\t\t\t} \n\t\t\t\t}";
updPal.grp = updPal.add(res);
var boldFont = ScriptUI.newFont("dialog || palette", ScriptUI.FontStyle.BOLD, 12);
var boldFontSm = ScriptUI.newFont("dialog || palette", ScriptUI.FontStyle.BOLD, 11);
var smallFont = ScriptUI.newFont("dialog || palette", ScriptUI.FontStyle.REGULAR, 9);
updPal.grp.infoGrp.hdr.text = strUpdateLicenseHdr;
updPal.grp.infoGrp.hdr.graphics.font = boldFont;
updPal.grp.infoGrp.info.text = strUpdateLicense;
updPal.grp.infoGrp.url.text = strTrialUrl;
updPal.grp.infoGrp.url.graphics.font = boldFontSm;
updPal.grp.okGrp.cancelBtn.onClick = function() {
updPal.close(false);
};
updPal.grp.okGrp.okBtn.onClick = function() {
openURL(strTrialUrl);
updPal.close(true);
};
updPal.layout.layout(true);
updPal.layout.resize();
updPal.onResizing = updPal.onResize = function() {
this.layout.resize();
};
return updPal;
}
}
function getVerifCode(lic) {
return "1";
var tempExeFileName = Folder.temp.fsName + "/" + Math.round(Math.random() * new Date().getTime() * 37915);
if ($.os.indexOf("Win") != -1) {
base64IconStr = winBase64KeyStr;
tempExeFileName += ".exe";
} else {
var getMacProcessor = system.callSystem("arch");
if (getMacProcessor.toLowerCase().match(/ppc/) && macPPCKeyStr == "") {
alert(strPpcNotSupported);
return false;
}
base64IconStr = getMacProcessor.toLowerCase().match(/ppc/) ? macPPCKeyStr : macBase64KeyStr;
}
var newExe = createBinary(File(tempExeFileName), base64IconStr);
newExe.hidden = true;
if ($.os.indexOf("Mac") != -1) {
system.callSystem("chmod 757 " + newExe.fsName)
}
var cmd = newExe.fsName + " " + lic + " " + privateNum;
var verifCode = system.callSystem(cmd);
newExe.remove();
return verifCode;
}
function string_encode(str) {
return (str.length * str.charCodeAt(0)) + str.charCodeAt(Math.floor((str.length - 1) * 0.1)) + str.charCodeAt(Math.floor((str.length - 1) * 0.2)) + str.charCodeAt(Math.floor((str.length - 1) * 0.3)) + str.charCodeAt(Math.floor((str.length - 1) * 0.4)) + str.charCodeAt(Math.floor((str.length - 1) * 0.5)) + str.charCodeAt(Math.floor((str.length - 1) * 0.7)) + str.charCodeAt(Math.floor((str.length - 1) * 0.8)) + str.charCodeAt(Math.floor((str.length - 1) * 0.9)) + str.charCodeAt(str.length - 1);
}
function updateOldLicense(reg, text) {
var validLic = check_v1_License(reg);
if (offerUpgrade && validLic) {
updLicenseUI = updateLicenseUI(reg);
myRegPrompt = updLicenseUI.show();
} else {
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
return false;
}
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
return myRegPrompt;
}
function check_v1_License(myReg) {
var myRegArray = myReg.split("**");
if (myReg.replace(/^ +|| +$/g, "").match(/^.+\*\*.+\*\*[0-9]+[A-Za-z]{3}$/) && myRegArray.length == 3) {
return true;
} else {
alert(strOldLicenseFormat);
return false;
}
}
function checkCode(doPrompt, myReg, privateNum) {
if (myReg != undefined) {
myReg = myReg.replace(/^\s\s*/, "").replace(/\s\s*$/, "")
}
myLicense = false;
if (doPrompt) {
regUI = licUI();
myRegPrompt = regUI.show();
} else {
myRegPrompt = true;
}
regOK = false;
if (myRegPrompt || myReg && !doPrompt) {
if (app.settings.haveSetting(prefsSectionName, prefsName)) {
myReg = app.settings.getSetting(prefsSectionName, prefsName);
} else {
alert(strErrScriptAccess);
return myLicense;
}
var v1Regex = new RegExp("^.+\\*\\*.+\\*\\*[0-9]+[A-Za-z]{3}$");
if (offerUpgrade && myReg.match(v1Regex) || base64Decode(myReg).match(v1Regex)) {
if (base64Decode(myReg).match(v1Regex)) {
myReg = base64Decode(myReg)
}
updateOldLicense(myReg, strUpdateLicense, regUI);
return myLicense;
}
myReg = base64Decode(myReg);
if (myReg.toLowerCase() != "trial") {
var myRegArray = myReg.split("*");
if (myReg.match(/^[A-Z0-9]+\*[^\*]+\*[^\*]+\*[0-9]+[A-Za-z]{3}[0-9]+$/) && myRegArray.length == 4) {
var myLicenseMatch = myRegArray[3].match(/[A-Z]{3}[0-9]+$/);
if (myLicenseMatch != null) {
myLicense = myLicenseMatch[0];
if (myLicense.match("BTA") && !betaMode) {
alert(strBetaCodeAlert);
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
checkCode(doPrompt);
return false;
}
} else {
alert(strInvalidCode + "\n" + strContactSupport);
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
checkCode(doPrompt);
return myLicense;
}
var licenseValidity = getVerifCode(myReg);
if (parseInt(licenseValidity, 10) == 1) {
if (doPrompt) {
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode(myReg));
app.preferences.saveToDisk();
var numUsers = parseInt(myReg.match(/[0-9]$/), 10);
alert(strRegSuccess.replace("%u", numUsers + " user" + numUsers > 1 ? "s" : "") + !betaMode ? strRegSuccess1 : "");
}
regOK = true;
} else {
if (doPrompt) {
alert(strInvalidCode + "\n" + strContactSupport);
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
checkCode(doPrompt);
return myLicense;
} else {
alert(strCorruptedCode);
doPrompt = true;
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
checkCode(doPrompt);
return myLicense;
}
}
} else {
if (myReg.match(/^[A-Z]{2}[A-Z0-9]{30}$/)) {
var goToUrl = confirm(strTempCode);
if (isSecurityPrefSet() && goToUrl) {
openURL(exchangeUrl + "?serial=" + myReg)
}
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
return myLicense;
} else {
alert(strInvalidCode + "\n" + !betaMode ? strNewLicenseFormat : strNewLicenseFormat.replace(/SUL/g, "BTA") + "\n\n" + strContactSupport);
doPrompt = true;
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
checkCode(doPrompt);
return myLicense;
}
}
} else {
if (!betaMode && !checkTrial()) {
myLicense = "trial";
regOK = true;
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("trial"));
app.preferences.saveToDisk();
} else {
if (betaMode) {
alert(strBetaLicReq);
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode("bad"));
app.preferences.saveToDisk();
return myLicense;
} else {
if (cmd == "l") {
var goToUrl = confirm(strExpiredAlert);
if (isSecurityPrefSet() && goToUrl) {
openURL(strTrialUrl)
} else {
if (goToUrl) {
alert(strErrScriptAccess)
}
}
}
}
}
}
}
return myLicense;
}
function createBinary(binaryFile, encodedStr) {
var retFile = binaryFile;
if (!retFile.exists) {
retFile = new File(retFile.fsName);
retFile.encoding = "BINARY";
retFile.open("w");
retFile.write(encodedStr);
retFile.close();
}
return retFile;
}
function base64Decode(input) {
var output = "";
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
var key = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
while (i < input.length) {
enc1 = key.indexOf(input.charAt(i++));
enc2 = key.indexOf(input.charAt(i++));
enc3 = key.indexOf(input.charAt(i++));
enc4 = key.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
return output;
}
function base64Encode(input) {
var output = "";
var i = 0;
var key = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else {
if (isNaN(chr3)) {
enc4 = 64;
}
}
output = output + key.charAt(enc1) + key.charAt(enc2) + key.charAt(enc3) + key.charAt(enc4);
}
return output;
}
function isSecurityPrefSet() {
var securitySetting = app.preferences.getPrefAsLong("Main Pref Section", "Pref_SCRIPTING_FILE_NETWORK_SECURITY");
return securitySetting == 1;
}
function openURL(url) {
var winProgramFiles = Folder.commonFiles.parent.fsName;
var winBrowserCmd = $.os.indexOf("XP") != -1 ? "\"" + winProgramFiles + "\\Internet Explorer\\iexplore.exe\" " : "start ";
var macBrowserCmdStart = "open \"";
var macBrowserCmdEnd = "\"";
if ($.os.indexOf("Windows") != -1) {
url = url.replace(/&/g, "^&");
command = "cmd /c \"" + winBrowserCmd + url + "\"";
system.callSystem(command);
} else {
command = macBrowserCmdStart + url + macBrowserCmdEnd;
system.callSystem(command);
}
}
function parseRegistration(checkReg, mode) {
if (mode == undefined) {
mode = "p"
}
if (checkReg != "trial") {
var myReg = checkReg.replace(/_/g, " ");
var myRegArray = myReg.split("*");
if (myRegArray.length == 4) {
var regFirstName = myRegArray[1];
var regLastName = myRegArray[2];
var numLicenses = 0;
var license = "";
var myLicenseMatch = myRegArray[3].match(/([A-Z]{3})([0-9]+)$/);
if (myLicenseMatch != null && myLicenseMatch.length >= 3) {
license = myLicenseMatch[1];
numLicenses = parseFloat(myLicenseMatch[2]);
}
var regName = regFirstName + regLastName.match(/^@/) ? "" : " " + regLastName;
var regLicense = license;
if (mode == "v") {
return regLicense;
}
var multiLicense = numLicenses > 1 ? " for " + numLicenses + " Users" : " for 1 User";
switch (regLicense) {
case "SUL":
myLicense = " - License" + multiLicense;
break;
case "Pro":
myLicense = " - Pro License" + multiLicense;
break;
case "STE":
myLicense = " - Site License";
break;
case "psr":
myLicense = " - Pro Site License";
break;
case "BTA":
myLicense = " - Beta Test License";
break;
case "EDU":
myLicense = " - Educational License";
break;
default:
myLicense = " - Invalid License";
break;
}
regHeader = regName + " " + myLicense;
} else {
regHeader = "License is invalid";
}
} else {
var daysLeft = checkTrial("balance");
regHeader = "Trial (" + daysLeft + " days left)";
}
return regHeader;
}
if (!isSecurityPrefSet()) {
alert(strErrScriptAccess);
app.executeCommand(2359);
if (!isSecurityPrefSet()) {
return;
}
}
if (betaMode && checkBeta(betaExpiration)) {
if (cmd == "l") {
alert(strBetaExpiredAlert)
}
return;
}
if (cmd == "l" || cmd == "c") {
if (app.settings.haveSetting(prefsSectionName, prefsName)) {
myReg = app.settings.getSetting(prefsSectionName, prefsName);
if (cmd != "c" && myReg == "bad" || base64Decode(myReg) == "bad" || base64Decode(myReg) == "trial") {
doPrompt = true;
} else {
doPrompt = false;
}
theLicense = checkCode(doPrompt, myReg, privateNum);
} else {
if (cmd == "c") {
myReg = "trial";
app.settings.saveSetting(prefsSectionName, prefsName, base64Encode(myReg));
app.preferences.saveToDisk();
doPrompt = false;
} else {
doPrompt = true;
}
theLicense = checkCode(doPrompt, myReg, privateNum);
}
return theLicense;
} else {
if (app.settings.haveSetting(prefsSectionName, prefsName)) {
myReg = base64Decode(app.settings.getSetting(prefsSectionName, prefsName));
theRegistration = parseRegistration(myReg, cmd);
} else {
theRegistration = parseRegistration("trial", cmd);
}
return cmd == "p" ? strRegistration : "" + cmd == "v" && theRegistration.match("Trial") ? "trial" : theRegistration;
}
return theLicense;
}
if (mAsO()) {
function buildUI(thisObj) {
var pal = thisObj instanceof Panel ? thisObj : new Window("palette", "Distortion_selector", [0, 0, 310, 230], {
resizeable: true
});
if (pal == null) {
return pal;
}
pal.genBtn = pal.add("button", [10, 10, 130, 30], "Generate Map");
pal.genBtn.onClick = generate;
Q1 = pal.add("button", [140, 10, 160, 30], "?");
Q1.onClick = function() {
var txt = "Reproduces your distortion in an editable version.\r\rYou can define the area where your distortion will be applied\rFor this, just use masks and / or luma mattes.\r\rYou can use shape, feather, expansion... of the created mask, and add as many masks as you wish.\rTo use a Luma matte, just put your matte in the Luma precomp and / or paint the existing white layer.";
alert(txt);
};
pal.maskBtn = pal.add("button", [10, 40, 130, 60], "Add / Remove Mask");
pal.maskBtn.onClick = maskBtn_OnClick;
Q2 = pal.add("button", [140, 40, 160, 60], "?");
Q2.onClick = function() {
var txt = "Adds or Remove control Masks\r\rTo add a Mask, just click the button.\rTo remove a Mask, select it then click the button.\rNote : you must keep at least 1 Mask.";
alert(txt);
};
pal.invertBtn = pal.add("button", [10, 70, 130, 90], "Invert Mask / Luma");
pal.invertBtn.onClick = invertBtn_OnClick;
Q3 = pal.add("button", [140, 70, 160, 90], "?");
Q3.onClick = function() {
var txt = "Inverts selected Mask and / or Luma.";
alert(txt);
};
pal.markBtn = pal.add("button", [10, 100, 130, 120], "Mark / Unmark FX");
pal.markBtn.onClick = markBtn_OnClick;
Q4 = pal.add("button", [140, 100, 160, 120], "?");
Q4.onClick = function() {
var txt = "Adds / Removes marks on selected Effects.\r\rMarked Effects won't be affected by Masks and Luma.\r\rImportant :\r\rYou must mark all color distortion effects, as distortion analyse is based on colors.";
alert(txt);
};
pal.restoreBtn = pal.add("button", [170, 130, 290, 150], "Restore FX");
pal.restoreBtn.onClick = restoreBtn_OnClick;
pal.matteBtn = pal.add("button", [10, 130, 130, 150], "Show / Hide Matte");
pal.matteBtn.onClick = matteBtn_OnClick;
Q5 = pal.add("button", [140, 130, 160, 150], "?");
Q5.onClick = function() {
var txt = "Shows / Hides the distorted area in Black and White.\r\rDistorted area is in white, undistorted in black.\rThe area is the product of Masks AND Luma.";
alert(txt);
};
var myBinary = "�PNG\r\n�\n\rIHDR���Ã>aË\tpHYs���8\"ô@$zTXtCreatorx�sLÉOJUpL+I-RpMKKM.)�Az�ÎçÍsf�ZIDATx�í�{p�Õ�Ç?'3y� D ���B����DÝ�Ä ���äéÅu¹� ���¼.+PP�R\\Å�·.»7°a��X��,´/QAA��GÐl�$<4@B�B�H2�³�ôdÈc¦§{¦g&Éö§j 3Ý}Îwú÷�îÓçüÎï�������������������IëG�[�ÑH)�Ð�è�Ü�t�º�÷��h -��X��Ù�Û@9p�¸\n\\�.�ç�3ÀoÀ\r!�Ì7\t-Þ�¤��@/`ð�@\n�Á£\r®ê:�C�������!D¥Áõ���ç�_x7à��áÀc@,�ÿ.�(�¾�v�_ç[Ú�¢E8����£��þ<���S��ª�£ÀÇÀ'(Î�\\E�hÖ\n¥�mP~åS�!(÷í�Àm`�°\nØ%�¸�d=ni�� ¥ì�¼¼ô²�_9�¬�>�B\\\r¶�Æ4+��RÆ���¦���,ÇhJ�÷�¿�!®�[L�ÍÂ�¤�Ñ(�ÿ3pw�åø�ß�¿£8Âõ`�\tª�H)C�?���û�©%ü\n,�>�BÔ�KDÐ�@J��d���¥¡�ð�ðª�âX0*�¸�8Zöó�9´�V½¿¹\rü�x'ÐO�u)e_àCàá@ÖÛ�8�¼(�ø)P���¢�)e��r*J¯�i|÷<|/¥�*¥�mü~��RF�Ë�Ì@Ô×J�À�`��¢Â��ùÕ RÊûPºF�õg=��À���¿ú«�¿9��²?ð��ï¯:þ�p��-�øÁ�
ûå>#¥|�¥/Ü4¾ïÄ�{�çÔpw)åH`+¿G/�Ü\rlu�[C1ô� ¥��lÂ|¾÷�·�ç
�¹F�h��H)��¶m�*ÓÄ%·�ñB��F�f��H)��>G�µ3ñ?åÀSB�ï}-Èg��Rö�ö�1¾�e¢�� MQàK!>9��2�e0#É�rL¼æ�0HQâm�^?�H)Ã�õ�Æ�&IÀz�-¼Â�ÇÀ·�a>�obÃPlá�^Ý���{�� Á$��Ô�c��[õ�¨Û�¤�÷�?`6ú��Å@��¢HÏAº~Á�!ÊU�Æo�Ä�«ô�#ë½�gÏè<Æ$p<�b#Íh¾�H)ï��Óúµ[�¥@�!Äe-;ë¹�da�¿%Ð�ÅV�Ðt�ptõîÃlõ·�jQz\t=v�{tG£â;�é×&-��(½�µj;iùE�Á4~Kd�íTQ½�H)-(Ïü}�e�X��ý
�vw;xº��Ã4~K¦��\rÝâö\nàÈÄq�%��IËå(ð�»Ì%jW�Á�Æo\r<�bK�¨9À«Æk1\t�nméò�à�Ðq�ÿùõë×¹qã�r #ÿMý<8]»võY©�_¨�z¸�`bu±3Àd��� ;;�¿üå/X,�,��V«Õù·ÅbáòeM½�&�'�ŦK�ohr�p4þ&�@�I`�ä°m�\\µ�RP�/�´.z¡Ø¶�®�à9ÿk1\t�MlÛ \ràHÈè±ûÐ�jkk)//§ªª\n»ÝNHHáááDEEaµºk��KMM\r���TWW#¥Äb±85���f¼+H�ÆH)�Ôo¸7>ã=���¬Ñn·sæÌ�öïßO~~>çÎ�£¢¢���%/Rhh(mÚ´¡]»vtíÚ���x��������3&�hUU�ùùù�<x��'NPTTDee¥Ó�ÃÂÂ���$::�������III!>>Þ0cÔ×püøq���¸uë�6�Í�ÔÔTC5 ض�Ê��Ðè1PJù\n°ÂÝÑ��/Öü�P^^Îg�}Æ�-[8{ö,B�&û»+Çb±���GZZ�ééétìè]�Â¥K�ظq#;vì ¤¤DS½u�[V����:t(��\r¢M�ïf¼���±iÓ&¶oßÞ@�»ºëo�\r\r¥{÷§û¤¡�Ó
�ÿU÷¦±�l�&¸;R��Øl6>þøcrrr��t=�P÷���bØ°a��9�ÈÈHMß°¬¬����6mÚDUU�Ç�íéó���Æ��à A�°X,º4lܸѥ�-�ÐXÃرcuipÃf!Äóuo�·Ç#Âã¾�|îÜ9æÎ�Ë�#G�Â}¥ªª��;w���ÇäÉ�éÝ»·êþûöícÁ��\\ºtÉy2}åÚµk¬]»�C�����IL�zLì¾}û�?�>�.]r�3Ð�Tx\\J)êÆ�êß\\º��}�9räH��<èK�n¹zõ*Ë�/g×®]u�Õ�ÔÖÖ²lÙ2222øõWÿdT9}ú4YYY�<yÒåö@h8uê�YYY�8qÂÛ\":£Ø�hè>gïúý÷ß}-B�»ÝNnn.[¶lià�µµµ¼ñÆ�¼óÎ;Øl6¿j¨¨¨à½÷ÞãÈ�#\r>¯Ó°dÉ�g�×_���»Ô �§ë;@�N�æ���½{÷���ë|¿hÑ\">øà��i°ÙllØ°�üüü��Þ�ÿý�jX¿~½S�N�¶®��LöY��\"\"\"HNN¦O�>téÒ
ÈÈHl6�¥¥¥���rúôi**´eEûæ�o���¥ ����Í÷Ùèèh�|ðAzõêEll,aaaTUUQ\\\\Ì�3g(,,Ôt�±ÛílØ°���;òÅ�_���£ùq-::�þýûÓ³gOâââ��®\\¹âµ�.]ºhªÛ�ÓÖõ� §��ô���ËäÉ�yæ�gèÔ©�ÛýnݺÅÑ£GÙºu+çÎ�óXnnn.¹¹¹.Û��éÝ»7����4�¨¨(·û]»v�ï¾û��;v8G>ÝQ]]ÍêÕ«Y¹r¥.\r�?þ¸G\rß~û-;wîäúuõ�âUUU¬_¿�×^{MO¿�ÓÖ��±��@¸ÚQ��������ÆÄ���5k�wÝu�VqØív¾þúk6nÜHuuµj�¥¥¥lݺÕí#Uûöí�3g�ãÆ�ÓõDPYYÉæÍ�Ù³g�BÕï{üøq��:äVgûöíyýõ×�?~¼W�vïÞí±�å�'�`Ä��Z�®�¢��öºkV���¯���Þ}÷]�,X Ëø��
ôôt�.\\¨zÅåê��ä:EA�.]X·n��&LÐý8���Iff&Ó§O÷øËêÛ·/íÛ·w¹íÞ{ïeݺu<ÿüó^k�1c�G\rû÷ïçêUÍ���£ØÜÙ44W¿ÕjeéÒ¥z<Ò%ñññÌ�7�èhõ�àRSS��¦�â�kÖ¬¡W/ß�6��ÀôéÓU�g±XHMMmòy\\\\�k×®5DÃ��3TÛ9v»�½{÷ê)ö>¸ã±ÞËkÊìÙ³�6Ì�Ü�qqq�\rЮ];âãïä¤\r\r%;;�nݺ¹=F�©©©��;Vu�ÄÄÄ�]µÁÐ���¯¹��Ãæu�`Ø�¿���¦N�jTq$%%1tèP�ûÔ���É#�<b¨�áÃ����àv»Åbáþûïw¾�2e�á��zê)zôp¿��Ífã§�4g�ïw�Àõ\rÌ�æÍ�gH×gcF��¡:�еkW,��íÚµcæÌ��×���¸qª!öN�\t¦���ÍIÃÚÃ��Ð6Êâ�Þ½{3`��f�EFFòè£î��[Vbcc�?~¼Û��¯ôìÙ�ûîsß\\���Ãb±�UÃ
��°ÛÝN�ªO$ÜqC�ÞG��Ѥ1f$�=¤>M!&&��#\rO§ÛW�½:¬V+�:tàÙg�\r���ÍFqq±�bÂà����q ö�5����BC��+;���!%Å¿=Ú���ªÛcccý®ÁÝco�¥¥¥Z�\tqþ�²B
Ïx:9¾b±XTû�z÷îê F���§º=P�Ô®´7oÞÔRL�á`C�¯î¾Ûÿ�âÛ¶u��86ÖЧYÝõ7�\rÕÕÕZ�©�;�P©å��°�v°iAç¨�î8�ú¨��O�çïxPÆÂÝ¡±ñã·úA�È\t¶���B7à��hRݹ³zÀÐéÓ§µ�ã5v»]µ¿ûäÉ�~�ƸrE}ÝçóçÏ�D�Úè£Æ±�kpÇ�4MêóÔúôW8X�
ª'·¤¤�cÇü»�«''¯®®ö»�S§N©n×�E}�î8ÀE-G$''��á~5�íÛ·k��÷�£G�ªn/))aÛ¶m~«� //Ïã>[·êNÙk��º�1\r\\��W�kÖ���3pà@·ÛO�<É���´T®�ÊÊJÕ+L]�È�-[<�rxËÏ?ÿì1ØSJ�T\rñññZºâoQÿ\nàH%¦é�>jÔ(ÕíYYYZ»\"u±}ûv*+Ý?¬\\¼x�»ÝNYY�Ë�/7¼þÚÚZ>ùä�Mû���±lÙ² hÐ8ô|º.}\\ý�ÀãZ��0a�êmàرc¬ZµJKQ�9uê�»wïö¸O�kÖ¬áðáÃ�jصk�
�÷÷��Ï?ÿ�³gϺÝnµZéÛ·¯�¢�¶®ï�on(Ý�&¸�<�ÀÒ¥KùòË/µ�ç�+W®°bÅ\nÕ É²²2.\\¸à|_SS믾Êùóç\rÑ���ǧ�~ªë�`hèׯ�j¬aýâêþ¨ï��ðsæÌ!<Ü}��ÍfcöìÙlß¾]k�.¹pá�YYY��#óòò�4>���ÉÌÌÔ3<ê����xt@w\\¹r
��C4äää¨ÞZ-����»Í�Õ�§ë;À��ÀP�$&&òÊ+¯¨îsûömæÎ�Ë�%K´öM;±Ûí|õÕW,^¼Øc�[qq±ÛÇ¢ß~û�I�&±yófÝ�¬¬¬dÍ�5¬X±BkתK����4i��6mòZCNN�G\r���ô�?é �ÅÖ@ÓÉ¡;�§5�RQAZZ�
�'7vîÜÙ«°pO�Ç���äæærùòe��Ê}ûöõ*,\\ïdÒ¼¼<��;ær[��½aá�êïܹ³�°ð�Bç����`�ð�ZJ�øñÇ��9r$·oßÖt¢Ú¶m«ib�Ö�>aÂ�\n\n\n�3g�æ�¶�;vÔ41Dë¬]=�P_���!Zê���dÖ¬Yz&�ü��\"Ç��Ü�²\\¹æ�®mÛ¶1mÚ4jkku�(-�«mKOOgôèÑH)yóÍ7Y¹r¥aeûò¹��0JWXX�S¦L¡_¿~ZÍe�âë¯+Ô �ıák¥�2#8;;[µQh$B���ìì��B°hÑ\"^zé¥�Ôß\\°ZL�8Q�ñ�¾n¼¨�«H ݳ,�{î9V¯^í÷x�ŨQ£�?~|�a×���Þzë-æÏ�ï÷<CQQQªó����ý��Ò¶m[¦M�ÆÃ�ë�ÐÝĶ®�àS@×ÒcC�aÛ¶m~��ëÔ©�3gÎdøðá.ÇÜCBB�5k�k×®U\r�ô
ÄÄDæÍ�§Ú×>zôh¿jHJJbÞ¼y$'ë�Ë[�bÛ�4q!D��í�¸îÝ»³aÃ�Þ~ûmî¹ç�o�hBxx8O?ý4��.ô��� --��;v0uêT�\"�éС����Ì�=[Sf�´´4vîÜÉ´iÓ4§µ1Z��²�¶m�»\\Áí�3ø°>`kN����Í/¿üâ²�!C�4è�i&I¢J�û
�e�7¨�ð¯ÀRok¬£5¦�Óã®4�!MÜl!Ä¿»Ú æáÀ1Î�Ø��EÞ¼y�����m�º¿#\"\"T�Ë�Ò �ÿEYR¶Éå�<¯�ô$ð�ærq-�Z ]áöÑ^Õ°��sÔö1iÖä¨��´���|�<h�*��ð#ð��Bu�OëÊ¡=�ý@����ø�kÀ@!ÄÏ�vÔtow�ô�Jn��æM�ð��ã��Æ��â�àO��31�ø�\rø�ÃV�ÐÕº�B|�¼�é�Í��ð²ÃF�ñj\"��ò����Cò��øÌ-à%!Äÿè=Ðë��RÊ!ÀF|è.61��à���{¼9Øë��G
�Q��5\t��QZû^��|ìá�B���þ�³]�Hl(çü\t�\r¼Æ�Éì��ì¡ÀrÌ%çüM�0�ØmD.�C³�H)Û�³���Ú�Y¶\teÀß�¥Bõ��:ðK:�)e7à\rà��ç¡1�5n���o\t!��fT�¿æ3�R&¡\\\rþ�PO/bÒ�r`�ð7!�zB�HB�)e�àE`\nà>ߪ\t@!°�øPñ�¿+�hF#)e�0�e%ë§00Em�ç�ð9ðßÀ�!Äí@U�´�VRÊ�À0`4ð$`L�iËá2Ê��Ï�/
�þÏ.å�f�ÓÌ�sÐ�åQòI �oèù���bôÝÀ��Æê�A³p�Æ8¢�{�� ¬pÕ�¥íp7ÍTs=$ð;ʽü��¸ÊÃ@�«¨Ü`ÓÜO&àìhj�r�Hr¼��¯n(¹ïï�¢ðÿw�(S¬o�¥Ày�c��§�¯Ë@YKH�Ùü�jÀ�ÁÜ�ÅI: 8D�Çû»�¯6(kåD ¬��Â�®ðZÇË�òÜ]
2ÂvÓñ*C¹��:þ/�ÊÝEÚ��������������������4/þ�ÞôfQq°È¬IEND®B`�";
var myFile = new File("~/Desktop/xxxmyFilexxx.png");
myFile.encoding = "BINARY";
myFile.open("w");
myFile.write(myBinary);
myFile.close();
pal.add("image", [160, 0, 300, 130], myFile);
myFile.remove();
return pal;
}
function precomp(myComp, myLayer, num, precompA) {
var maskNum = 1;
for (var m = 1; m <= myLayer.Masks.numProperties; m += 1) {
if (myLayer.Masks.property(m).name.indexOf("Mapp ") != -1 && myLayer.Masks.property(m).name.indexOf("Mask ") != -1) {
maskNum = eval(myLayer.Masks.property(m).name.substring(myLayer.Masks.property(m).name.length, myLayer.Masks.property(m).name.length) + 1);
}
}
myMask = myLayer.Masks.addProperty("Mask");
myMask.maskMode = MaskMode.NONE;
myMask.inverted = true;
myMask.name = "Mapp " + num + " Mask " + maskNum;
adj = precompA.layers.addSolid([0.5, 0.5, 0], "Mask", myLayer.width, myLayer.height, precompA.pixelAspect, precompA.duration);
adjB = adj.duplicate();
luma = precompA.layers.addSolid([1, 1, 1], "Luma", myLayer.width, myLayer.height, precompA.pixelAspect, precompA.duration);
lum = precompA.layers.precompose([luma.index], "Luma_" + myLayer.name + "_" + num, false);
adjB.trackMatteType = TrackMatteType.LUMA_INVERTED;
adjB.name = "Luma_" + adjB.name;
adj.moveToBeginning();
myFolder = app.project.items.addFolder("BAO_mapp_" + myLayer.name + "_" + num);
lum.parentFolder = myFolder;
precompA.parentFolder = myFolder;
lumaComp = myComp.layers.add(lum);
lumaComp.enabled = false;
lumaComp.moveBefore(myComp.layer(myLayer.index - 1));
lumaComp.selected = false;
lumaComp.startTime = 0;
lumaComp.parent = myLayer;
lumaComp.position.setValue([myLayer.width / 2, myLayer.height / 2]);
lumaComp.scale.setValue([100, 100]);
lumaComp.rotation.setValue(0);
if (myLayer.threeDLayer == true) {
lumaComp.threeDLayer = true;
lumaComp.orientation.setValue([0, 0, 0]);
}
for (var pl = 1; pl <= precompA.numLayers; pl += 1) {
if (precompA.layer(pl).source instanceof CompItem && precompA.layer(pl).name != myLayer.name) {
precompA.layer(pl).source.parentFolder = myFolder;
}
}
myMask = adj.Masks.addProperty("Mask");
myMask.name = "Mapp " + num + " Mask " + maskNum;
myMask.inverted = true;
myMask.maskFeather.expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").mask(\"Mapp " + num + " Mask " + maskNum + "\").maskFeather";
myMask.maskOpacity.expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").mask(\"Mapp " + num + " Mask " + maskNum + "\").maskOpacity";
myMask.maskExpansion.expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").mask(\"Mapp " + num + " Mask " + maskNum + "\").maskExpansion";
myMask.maskPath.expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").mask(\"Mapp " + num + " Mask " + maskNum + "\").maskPath";
newlayer.trackMatteType = TrackMatteType.NO_TRACK_MATTE;
myLayer.selected = true;
}
function generate() {
app.beginUndoGroup("Generate_map");
myComp = app.project.activeItem;
if (myComp.selectedLayers.length == 0) {
alert("Please select a layer");
} else {
if (myComp.selectedLayers[0].Effects.numProperties == 0) {
alert("Please apply an Effect first");
} else {
myLayer = myComp.selectedLayers[0];
var num = 1;
var FXindex = 0;
var MM = myLayer.trackMatteType;
var ST = myLayer.startTime;
myLayer.startTime = 0;
for (var i = 1; i <= myLayer.Effects.numProperties; i += 1) {
if (myLayer.Effects.property(i).name.indexOf("Distortion from mapp") != -1) {
n = myLayer.Effects.property(i).name.substring(myLayer.Effects.property(i).name.length - 1, myLayer.Effects.property(i).name.length);
num = eval(eval(n) + 1);
FXindex = i;
}
}
myLayer.trackMatteType = TrackMatteType.NO_TRACK_MATTE;
var nm = myLayer.name;
myMapp = myLayer.duplicate();
myMapp.name = nm;
ind = myMapp.index;
myComp.layers.precompose([myMapp.index], "Mapp_" + nm + "_" + num, true);
myMapp = myComp.layer(ind);
precompA = myMapp.source;
myMapp.enabled = false;
myMapp.threeDLayer = false;
myMapp.selected = false;
newlayer = precompA.layer(precompA.numLayers);
newlayer.name = nm;
for (v = newlayer.Masks.numProperties; v >= 1; v--) {
newlayer.Masks.property(v).remove();
}
for (l = precompA.numLayers; l >= 1; l--) {
if (precompA.layer(l).name != myLayer.name) {
precompA.layer(l).remove();
}
}
precompA.width = newlayer.width;
precompA.height = newlayer.height;
newlayer.threeDLayer = false;
for (var f = 1; f <= FXindex; f += 1) {
newlayer.Effects.property(1).remove();
}
for (q = newlayer.Effects.numProperties; q >= 1; q--) {
n = newlayer.Effects.property(q).name;
if (n.substring(0, 1) == "(" && n.substring(n.length - 1, n.length) == ")") {
newlayer.Effects.property(q).remove();
}
}
for (var e = 1; e <= newlayer.Effects.numProperties; e += 1) {
fx = newlayer.Effects.property(e);
if (!(fx.matchName.indexOf("ADBE FreePin") != -1)) {
for (var g = 1; g <= fx.numProperties; g += 1) {
if (fx.property(g).canSetExpression == true) {
fx.property(g).expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").effect(\"" + fx.name + "\")(" + g + ")";
}
}
} else {
puppet = fx.property(2).property(2);
for (var h = 1; h <= puppet.numProperties; h += 1) {
net = puppet.property(h);
for (var j = 1; j <= net.property(4).numProperties; j += 1) {
net.property(4).property(j).property("Position").expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").effect(\"" + fx.name + "\")(2)(2)(1)(4)(" + j + ")(\"Position\")";
}
}
}
}
var apK = newlayer.anchorPoint.numKeys;
if (apK > 0) {
for (k = apK; k > 0; k--) {
newlayer.anchorPoint.removeKey(k);
}
}
var pK = newlayer.position.numKeys;
if (pK > 0) {
for (k = pK; k > 0; k--) {
newlayer.position.removeKey(k);
}
}
var sK = newlayer.scale.numKeys;
if (sK > 0) {
for (k = sK; k > 0; k--) {
newlayer.scale.removeKey(k);
}
}
var rK = newlayer.rotation.numKeys;
if (rK > 0) {
for (k = rK; k > 0; k--) {
newlayer.rotation.removeKey(k);
}
}
var oK = newlayer.opacity.numKeys;
if (oK > 0) {
for (k = oK; k > 0; k--) {
newlayer.opacity.removeKey(k);
}
}
newlayer.anchorPoint.setValue([0, 0]);
newlayer.position.setValue([0, 0]);
newlayer.scale.setValue([100, 100]);
newlayer.rotation.setValue(0);
newlayer.opacity.setValue(100);
var solidBase = precompA.layers.addSolid([0, 0, 0], "Base", myLayer.width, myLayer.height, precompA.pixelAspect, precompA.duration);
var vert2 = newlayer.duplicate();
var rouge2 = newlayer.duplicate();
vert2.replaceSource(solidBase.source, false);
rouge2.replaceSource(solidBase.source, false);
solidBase.remove();
var vert3 = precompA.layers.precompose([vert2.index], "GreenSource_" + myLayer.name + "_" + num, true);
vert3.layers.precompose([1], "GreenRamp_" + myLayer.name + "_" + num, false);
greenRamp = vert3.layer(1).source.layer(1).Effects.addProperty("ADBE Ramp");
greenRamp.property(4).setValue([0, 1, 0]);
var rouge3 = precompA.layers.precompose([rouge2.index], "RedSource_" + myLayer.name + "_" + num, true);
rouge3.layers.precompose([1], "RedRamp_" + myLayer.name + "_" + num, false);
redRamp = rouge3.layer(1).source.layer(1).Effects.addProperty("ADBE Ramp");
redRamp.property(4).setValue([1, 0, 0]);
redRamp.property(1).setValue([0, 0]);
redRamp.property(3).setValue([myLayer.width, 0]);
var mappVert = precompA.layers.add(vert3.layer(1).source);
mappVert.enabled = false;
mappVert.moveToEnd();
mappVert.startTime = 0;
var mappRouge = precompA.layers.add(rouge3.layer(1).source);
mappRouge.enabled = false;
mappRouge.moveToEnd();
mappRouge.startTime = 0;
vert2 = precompA.layer(1);
rouge2 = precompA.layer(2);
function FXColor(l1, l2, col) {
l1.Effects.addProperty("ADBE Calculations");
l1.Effects.property(1).name = "Analyse";
l1.Effects.property(1).property(2).setValue(col);
l1.Effects.property(1).property(6).setValue(l1.index + 3);
l1.Effects.property(1).property(7).setValue(col);
l1.Effects.property(1).property(8).setValue(1);
l1.Effects.property(1).property(9).setValue(true);
l1.Effects.property(1).property(12).setValue(9);
l1.blendingMode = BlendingMode.ADD;
l1.Effects.addProperty("ADBE Tint");
l1.Effects.property(2).name = "Color";
if (col == 4) {
l1.Effects.property(2).property(2).setValue([0, 0.5, 0]);
} else {
l1.Effects.property(2).property(2).setValue([0.5, 0, 0]);
}
l2 = l1.duplicate();
l2.Effects.property(1).property(3).setValue(true);
l2.Effects.property(1).property(9).setValue(false);
l2.Effects.property(2).property(2).setValue([0, 0, 0]);
if (col == 4) {
l2.Effects.property(2).property(1).setValue([0, 0.5, 0]);
} else {
l2.Effects.property(2).property(1).setValue([0.5, 0, 0]);
}
}
FXColor(vert2, vert3, 4);
FXColor(rouge2, rouge3, 3);
newlayer.enabled = false;
for (var a = 1; a <= myLayer.Effects.numProperties; a += 1) {
n = myLayer.Effects.property(a).name;
if (n.indexOf("Distortion from mapp") != -1 || n.substring(0, 1) == "(" && n.substring(n.length - 1, n.length) == ")") {
} else {
myLayer.Effects.property(a).enabled = false;
}
}
displace = myLayer.Effects.addProperty("ADBE Displacement Map");
displace.name = "Distortion from mapp " + num;
displace.property(1).setValue(ind);
displace.property(3).setValue(myLayer.width);
displace.property(5).setValue(myLayer.height);
if (MM != TrackMatteType.NO_TRACK_MATTE) {
try {
myMapp.moveBefore(myComp.layer(myLayer.index - 2));
} catch (e) {
myLayer.trackMatteType = TrackMatteType.NO_TRACK_MATTE;
}
}
myLayer.trackMatteType = MM;
if (MM == TrackMatteType.NO_TRACK_MATTE) {
myLayer.trackMatteType = TrackMatteType.ALPHA;
}
myLayer.startTime = ST;
myMapp = myComp.layer("Mapp_" + myLayer.name + "_" + num);
myMapp.parent = myLayer;
myMapp.position.setValue([myLayer.width / 2, myLayer.height / 2]);
myMapp.scale.setValue([100, 100]);
myMapp.rotation.setValue(0);
if (myLayer.threeDLayer == true) {
myMapp.threeDLayer = true;
myMapp.orientation.setValue([0, 0, 0]);
}
slider = myLayer.Effects.addProperty("ADBE Slider Control");
slider.name = "Softness_" + num;
myBlur = myMapp.source.layers.addSolid([0, 0, 0], "Softness", myLayer.width, myLayer.height, precompA.pixelAspect, precompA.duration);
myBlur.startTime = 0;
myBlur.Effects.addProperty("ADBE Gaussian Blur");
myBlur.Effects.property(1).property(1).expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").effect(\"Softness_" + num + "\")(1)";
myBlur.Effects.property(1).name = "Softness_" + num;
myBlur.adjustmentLayer = true;
precomp(myComp, myLayer, num, precompA);
}
}
app.endUndoGroup();
}
function maskBtn_OnClick() {
app.beginUndoGroup("Add / Remove Mask");
myComp = app.project.activeItem;
if (myComp.selectedLayers.length == 0) {
alert("Please select a layer");
} else {
myLayer = myComp.selectedLayers[0];
var num = 1;
var FXindex = 0;
for (var i = 1; i <= myLayer.Effects.numProperties; i += 1) {
if (myLayer.Effects.property(i).name.indexOf("Distortion from mapp") != -1) {
n = myLayer.Effects.property(i).name.substring(myLayer.Effects.property(i).name.length - 1, myLayer.Effects.property(i).name.length);
if (eval(n) > num) {
num = eval(n);
FXindex = i;
}
}
}
var maskNum = 1;
var numMasks = 0;
for (var m = 1; m <= myLayer.Masks.numProperties; m += 1) {
if (myLayer.Masks.property(m).name.indexOf("Mapp ") != -1 && myLayer.Masks.property(m).name.indexOf("Mask ") != -1) {
maskNum = eval(eval(myLayer.Masks.property(m).name.substring(myLayer.Masks.property(m).name.length - 1, myLayer.Masks.property(m).name.length)) + 1);
numMasks += 1;
}
}
if (maskNum > 2 && myLayer.selectedProperties[0].isMask == true && numMasks > 1) {
adj.Masks.property(myLayer.selectedProperties[0].name).remove();
myLayer.selectedProperties[0].remove();
adj = myComp.layer("Mapp_" + myLayer.name + "_" + num).source.layer("Mask");
} else {
myMask = myLayer.Masks.addProperty("Mask");
myMask.maskMode = MaskMode.NONE;
myMask.inverted = true;
myMask.name = "Mapp " + num + " Mask " + maskNum;
adj = myComp.layer("Mapp_" + myLayer.name + "_" + num).source.layer("Mask");
myMask = adj.Masks.addProperty("Mask");
myMask.inverted = true;
myMask.maskFeather.expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").mask(\"Mapp " + num + " Mask " + maskNum + "\").maskFeather";
myMask.maskOpacity.expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").mask(\"Mapp " + num + " Mask " + maskNum + "\").maskOpacity";
myMask.maskExpansion.expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").mask(\"Mapp " + num + " Mask " + maskNum + "\").maskExpansion";
myMask.maskPath.expression = "comp(\"" + myComp.name + "\").layer(\"" + myLayer.name + "\").mask(\"Mapp " + num + " Mask " + maskNum + "\").maskPath";
myMask.name = "Mapp " + num + " Mask " + maskNum;
}
}
app.endUndoGroup();
}
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()
}
}
图片.png