Доступ через AS3 (для экспорта) Градиент прямоугольника, созданного во флэш-редакторе
-
30-09-2019 - |
Вопрос
Мне нужно экспортировать настройки градиента прямоугольника, созданного с помощью редактора Flash. Наш художник создает прямоугольник с градиентом в .fla. Можно ли получить параметры градиента из .swf или от плагина Flash, который я мог бы написать?
Решение
Мне нужно было это пару лет назад, к счастью, Tink уже писал скрипт расширения / JSFL: Копировать заполнить как AS3.
Я помню, что имея небольшие проблемы с градиентами в зависимости от отбора, но забыли то, что все было о. Если расширение не работает должным образом, вот моя слегка изменилась версия:
document = fl.getDocumentDOM();
selection = document.getSelectionRect();
selection.left != undefined ? useSelection = true : useSelection = false;
useSelection ? fill = document.getCustomFill( "selection" ) : fill = document.getCustomFill( "toolbar" );
fl.outputPanel.clear();
var output = "";
if(fill.style != "noFill"){
if( fill.style == "solid" )
{
if( fill.color.length == 9 )
{
a = Math.round( ( parseInt( "0x" + fill.color.substr( 7, 2 ) ) / 255 ) * 100 ) / 100;
output += "beginFill( 0x" + fill.color.substr( 1, 6 ).toUpperCase() + ", " + a + " );";
}
else
{
output += "beginFill( 0x" + fill.color.substr( 1, 6 ).toUpperCase() + ", 1 );";
}
}
else if( fill.style == "linearGradient" )
{
output += "beginGradientFill( GradientType.LINEAR, ";
}
else if( fill.style == "radialGradient" )
{
output += "beginGradientFill( GradientType.RADIAL, ";
}
if( fill.style != "solid" )
{
c = new Array();
a = new Array()
for( i = 0; i < fill.colorArray.length; i++ )
{
if(fill.colorArray){
if( fill.colorArray[ i ].length == 9 )
{
c.push( "0x" + fill.colorArray[ i ].substr( 1, 6 ).toUpperCase() );
a.push( Math.round( ( parseInt( "0x" + fill.colorArray[ i ].substr( 7, 2 ) ) / 255 ) * 100 ) / 100 );
}
else
{
c.push( "0x" + fill.colorArray[ i ].substr( 1, 6 ).toUpperCase() );
a.push( 1 );
}
}
}
document.setSelectionRect({left:0,top:0,right:0,bottom:0},true);
document.setSelectionRect(selection,true);
localX = fill.matrix.tx - selection.left;
localY = fill.matrix.ty - selection.top
if(localX < 0 || localY < 0) error = true;
else error = false;
if(useSelection)
{
matrix = 'new Matrix(' + fill.matrix.a + ', ' + fill.matrix.b + ', ' + fill.matrix.c + ', ' + fill.matrix.d + ', ' + localX + ', ' + localY + ')';
}
else
{
matrix = 'new Matrix(' + fill.matrix.a + ', ' + fill.matrix.b + ', ' + fill.matrix.c + ', ' + fill.matrix.d + ', ' + fill.matrix.tx + ', ' + fill.matrix.ty + ')';
}
switch(fill.overflow){
case "Extend":
spreadMethod = "SpreadMethod.PAD";
break;
case "Repeat":
spreadMethod = "SpreadMethod.REPEAT";
break;
case "Reflect":
spreadMethod = "SpreadMethod.REFLECT";
break;
}
!fill.linearRGB ? interpolationMethod = 'InterpolationMethod.RGB' : interpolationMethod = 'InterpolationMethod.LINEAR_RGB';
if(fill.focalPoint != 0) output += "[ " + c.join( ", " ) + " ], [ " + a.join( ", " ) + " ], [ " + fill.posArray.join( ", " ) + " ], " + matrix + ", " + spreadMethod + ", " + interpolationMethod + ", " + fill.focalPoint + "); ";
else output += "[ " + c.join( ", " ) + " ], [ " + a.join( ", " ) + " ], [ " + fill.posArray.join( ", " ) + " ], " + matrix + ", " + spreadMethod + ", " + interpolationMethod + "); ";
}
if(error)
{
fl.trace("You have moved your selection!Please re-select the shape and run this command again");
}else
{
fl.clipCopyString( output );
fl.trace( output );
}
}else{
fl.trace( 'No Fill is Selected' );
}
Если вы сохраните это как Копировать заполнить как AS3.JSFL в Flash's. Команды Папка, она должна появиться в меню команд в IDE.
Емкость
Другие советы
Посмотрите на экскусственную библиотеку AS3SWF Написано Клаус Уэлерс, от того, что вы можете
Разбор, создать, изменить и опубликовать SWF-файлы
.
De Sothink Decompiler позволяет декомпилировать SWF, чтобы вы получили оригинальный FLA. http://www.sothink.com/product/flashdeCompiler/ Оплачено, но у них есть бесплатная пробная версия.
Не мог вспомнить, можете ли вы экспортировать в FLA в суде.