var TRACES = false; var BITMAP = "bitmap"; var MOVIE_CLIP = "movieclip"; var LIB_DIRECTORY = "assets"; //------------------------------------------------ function convertVectoToBitmap() { //Nettoie la sortie fl.outputPanel.clear(); if ( TRACES ) fl.trace( "Start !" ); /*********************************/ /************ PHASE 1 ************/ /*********************************/ //Récupère le document et la librairie var doc = fl.getDocumentDOM(); var library = doc.library; //Message comme quoi il faut avoir sélectionner un clip à convertir avant de lancer le script if ( library.getSelectedItems().length == 0 ) { fl.trace( "ERREUR : sélectionner un clip à convertir dans la librairie !" ); return; } //Récupère le clip sélectionné (= clip à convertir) var clipVectoName = library.getSelectedItems()[0].name; var timeline = library.items[ library.findItemIndex( clipVectoName ) ].timeline; var layer = timeline.layers[ 0 ]; //Initialise les noms de fichiers, dossiers, ... var clipPNGName = clipVectoName + "-" + BITMAP; var libNewFolder = clipVectoName + "-" + BITMAP + "-" + LIB_DIRECTORY; var urlNewFolderTmp = getFolderURI() + LIB_DIRECTORY; //Copie l'anim à exporter timeline.selectAllFrames(); timeline.copyFrames(); if ( TRACES ) fl.trace( "Copy frames" ); //Faut selectionner la première frame de la scène principale... doc.getTimeline().selectAllFrames(); //Colle les frames sur la scène principale doc.getTimeline().pasteFrames(); if ( TRACES ) fl.trace( "Paste frames on main scene" ); //Crée un répertoire pour accueillir les PNG FLfile.createFolder( urlNewFolderTmp + "/" ); if ( TRACES ) fl.trace( "Create new folder for temporary PNG : " + urlNewFolderTmp ); //Exporte les frames en PNG doc.exportPNG( urlNewFolderTmp + "/", true, false ); if ( TRACES ) fl.trace( "Export PNG" ); //Crée un nouveau répertoire pour accueillir les PNG dans la librairie library.newFolder( libNewFolder ); if ( TRACES ) fl.trace( "Create new folder in library for PNG" ); //Importe les PNG dans la librairie var images = FLfile.listFolder( urlNewFolderTmp + "/", "files" ); if ( TRACES ) fl.trace( "Import PNG in library :" ); var i = 0; while( i < images.length ) { doc.importFile( urlNewFolderTmp + "/" + images[i], true ); library.moveToFolder( libNewFolder, library.items[ library.findItemIndex( images[i] ) ].name ); if ( TRACES ) fl.trace( images[i] ); i++; } //Nettoie la scène principale while( doc.getTimeline().layerCount > 1 ) doc.getTimeline().deleteLayer(); while( doc.getTimeline().frameCount > 1 ) doc.getTimeline().removeFrames(); doc.getTimeline().clearFrames(); doc.getTimeline().addNewLayer( "Calque 1" ); doc.getTimeline().deleteLayer( 1 ); if ( TRACES ) fl.trace( "Remove frames from main scene" ); //Supprime le répertoire temporaire qui a reçu les PNG if ( FLfile.exists( urlNewFolderTmp ) ) { var b = FLfile.remove( urlNewFolderTmp ); if ( TRACES ) if ( b ) fl.trace( "Remove file " + urlNewFolderTmp ); } /*********************************/ /************ PHASE 2 ************/ /*********************************/ //Crée un nouveau clip (Bitmap) library.addNewItem( MOVIE_CLIP, clipPNGName ); timeline = library.items[ library.findItemIndex( clipPNGName ) ].timeline; layer = timeline.layers[ 0 ]; if ( TRACES ) { fl.trace( "Create new " + MOVIE_CLIP + " : " + clipPNGName ); fl.trace( "------------------------------------------------" ); } //Récupère tous les les items de la librairie var arrayItem = library.items; var arrayLength = arrayItem.length; var currentFrame = 0; //Autorise la modification du nouveau clip library.editItem( clipPNGName ); //Coordonnées de positionnement des bitmap dans le nouveau clip var coord = { x:0, y:0 }; //Lissage des bitmap var allowSmoothing = true; //Parcours tous les items de la librairie et ajoute les bitmap au nouveau clip var i = 0; while ( i < arrayLength ) { //Si on est dans le bon répertoire, que l'item courant est un bitmap, alors on crée une frame et on l'ajoute var item = arrayItem[ i ]; if ( item.name.split( "/" )[0] == libNewFolder ) { if ( item.itemType == BITMAP ) { timeline.insertKeyframe( currentFrame ); if ( TRACES ) fl.trace( "Add frame : " + (currentFrame + 1) ); timeline.setSelectedFrames( currentFrame, currentFrame, true ); library.addItemToDocument( coord, item.name ); if ( TRACES ) fl.trace( "Add " + item.itemType + " : " + item.name ); item.allowSmoothing = allowSmoothing; if ( TRACES ) fl.trace( "Allow smoothing : " + item.name ); /* //Récup taille bitmap var w = doc.selection[0].width; var h = doc.selection[0].height; fl.trace(w + " x "+h); */ if ( TRACES ) fl.trace( "------------------------------------------------" ); currentFrame++; } } i++; } //Supprime la dernière frame qui est vide timeline.removeFrames( currentFrame, currentFrame ); if ( TRACES ) fl.trace( "Remove frame : " + (currentFrame + 1) ); //Arrête les modification doc.exitEditMode; if ( TRACES ) fl.trace( "Finish !" ); } //------------------------------------------------ function getFolderURI() { var doc = fl.getDocumentDOM(); var fileName = doc.name; var filePath = doc.path; aFile = fileName.split( "." ); aPath = filePath.split( fileName ); folderURI = aPath[ 0 ]; folderURI = replaceStr( folderURI, "\\", "/" ); folderURI = replaceStr( folderURI, " ", "%20" ); //folderURI = replaceStr( folderURI, ":", "|" ); folderURI = "file:///" + folderURI; return folderURI; } //------------------------------------------------ function replaceStr( origStr, searchStr, replaceStr ) { var tempStr = ""; var startIndex = 0; if ( searchStr == "" ) return origStr; if ( origStr.indexOf( searchStr ) != -1 ) { while ( (searchIndex = origStr.indexOf( searchStr, startIndex ) ) != -1 ) { tempStr += origStr.substring( startIndex, searchIndex ); tempStr += replaceStr; startIndex = searchIndex + searchStr.length; } return tempStr + origStr.substring( startIndex ); } else { return origStr; } } convertVectoToBitmap();