Module d'importation d'image, retouche et recadrage pour un avatar

Soyez le premier à donner votre avis sur cette source.

Vue 4 485 fois - Téléchargée 540 fois

Description

Module Flash d'importation d'une image et réglage de ses dimensions, son contraste, sa luminosité et sa saturation. Le tout recadré et externalisé vers un script php qui sauvegarde l'image sur le serveur et l'affiche.
J'ai fait le debug très récemment. Si vous trouvez un bug, pourriez-vous m'en faire part. Merci d'avance...

Source / Exemple :


stop();

/**

  • INIT
    • /
import com.adobe.images.JPGEncoder; console.text = '[BEGIN]'; //movieClips var myImage:MovieClip = container; var myMoveStage:MovieClip = moveStage; var myBrowser:MovieClip = browser; var myAllShadow:MovieClip = allShadow; //Timer var moveTimer:Timer = new Timer(40); var cursorTimer:Timer = new Timer(40); var shadowTimer:Timer = new Timer(40); //myImage var fileRef:FileReference; var myImageMouseX:Number; var myImageMouseY:Number; var myImageX:Number; var myImageY:Number; var myImageWidth:Number; var myImageHeight:Number; var myImageBaseWidth:Number; var myImageBaseHeight:Number; var myMoveStagePadding:Number = 30; var bntResizeHorizontal:String; var bntResizeVertical:String; //filters var luminosity:Number; var contrast:Number; var saturation:Number; //handCursor on bnt bntResize1.buttonMode = true; bntResize2.buttonMode = true; bntResize3.buttonMode = true; bntResize4.buttonMode = true; bntLuminosity.buttonMode = true; bntContrast.buttonMode = true; bntSaturation.buttonMode = true; browser.bntBrowser.buttonMode = true; bntResize1.visible = false; bntResize2.visible = false; bntResize3.visible = false; bntResize4.visible = false; cursorHandOpen.visible = false; /**
  • BNT BROWSE
    • /
function onBrowser(e:MouseEvent):void { console.appendText(' > onBrowser'); fileRef = new FileReference(); fileRef.addEventListener(Event.SELECT, onBrowserSelect); var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.jpeg;*.gif;*.png"); fileRef.browse([imagesFilter]); } function onBrowserSelect(e:Event):void { console.appendText(' > onBrowserSelect'); e.target.load(); e.target.addEventListener(Event.COMPLETE, onInitImage); fileRef.removeEventListener(Event.SELECT, onBrowserSelect); browser.bntBrowser.removeEventListener(MouseEvent.MOUSE_DOWN, onBrowser); } /**
  • INIT POSITION DES ELEMENTS
    • /
function onInitPosition():void { console.appendText(' > onInitPosition'); //positionnement du cadre de la zone a sauver saveZone.x = myMoveStage.x + myMoveStage.width/2 - saveZone.width/2; saveZone.y = myMoveStage.y + myMoveStage.height/2 - saveZone.height/2; //positionnement des boutons sur les scrollBar bntLuminosity.x = scrollBackLuminosity.width/2 + scrollBackLuminosity.x; bntContrast.x = scrollBackContrast.width/2 + scrollBackContrast.x; bntSaturation.x = scrollBackSaturation.width/2 + scrollBackSaturation.x; bntLuminosity.y = scrollBackLuminosity.y; bntContrast.y = scrollBackContrast.y; bntSaturation.y = scrollBackSaturation.y; } /**
  • INIT IMAGE
    • /
function onInitImage(e:Event):void { console.appendText(' > onInitImage'); var myLoad:Loader = new Loader(); myLoad.loadBytes(e.target.data); myLoad.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingImageComplete); var bmpData:BitmapData; var bmp:Bitmap; function onLoadingImageComplete(e:Event):void { console.appendText(' > onLoadingImageComplete'); myLoad.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadingImageComplete); // Lissage de l'image et affichage bmpData = new BitmapData(e.target.content.width, e.target.content.height); bmpData.draw(e.target.content); bmp = new Bitmap(bmpData, "auto", true); myImage.addChild(bmp); shadowTimer.start(); shadowTimer.addEventListener(TimerEvent.TIMER, onShadowFadeOut); myImageBaseWidth = myImage.width; myImageBaseHeight = myImage.height; //listener stage.addEventListener(MouseEvent.MOUSE_UP, onStopMove); myMoveStage.addEventListener(MouseEvent.MOUSE_DOWN, onDragInit); bntResize1.addEventListener(MouseEvent.MOUSE_DOWN, onResize1); bntResize2.addEventListener(MouseEvent.MOUSE_DOWN, onResize2); bntResize3.addEventListener(MouseEvent.MOUSE_DOWN, onResize3); bntResize4.addEventListener(MouseEvent.MOUSE_DOWN, onResize4); bntLuminosity.addEventListener(MouseEvent.MOUSE_DOWN,onLuminosityInit); bntContrast.addEventListener(MouseEvent.MOUSE_DOWN,onContrastInit); bntSaturation.addEventListener(MouseEvent.MOUSE_DOWN,onSaturationInit); bntSave.addEventListener(MouseEvent.CLICK,onSave); bntReset.addEventListener(MouseEvent.CLICK,onReset); bntResize1.visible = true; bntResize2.visible = true; bntResize3.visible = true; bntResize4.visible = true; cursorHandOpen.visible = true; onHandCursorInit(); onInitWorkspace(); } } /**
  • FADE-OUT MASK GENERAL
    • /
function onShadowFadeOut(e:Event):void { myAllShadow.alpha = myAllShadow.alpha - 0.1; myBrowser.alpha = myBrowser.alpha - 0.1; if(browser.alpha < 0.01){ console.appendText(' > onShadowFadeOut'); myAllShadow.visible = false; myBrowser.visible = false; shadowTimer.stop(); shadowTimer.removeEventListener(TimerEvent.TIMER, onShadowFadeOut); } } /**
  • INIT VAR & WORKSPACE
    • /
function onInitWorkspace():void { console.appendText(' > onInitWorkspace'); //filters luminosity = 0; contrast = 1; saturation = 1.28; onFilterMove(); //positionement de l'image dans l'espace de travail (myMoveStage) myImage.width = myImageBaseWidth; myImage.height = myImageBaseHeight; myImageWidth = myImage.width; myImageHeight = myImage.height; var myImageHeightEchelle:Number = myImage.height * myMoveStage.width / myImage.width; if(myImageHeightEchelle <= myMoveStage.height){ myImage.width = myMoveStage.width - myMoveStagePadding * 2; myImage.height = myImage.width * myImageHeight / myImageWidth; }else{ myImage.height = myMoveStage.height - myMoveStagePadding * 2; myImage.width = myImage.height * myImageWidth / myImageHeight; } myImage.x = myMoveStage.x + (myMoveStage.width - myImage.width) / 2; myImage.y = myMoveStage.y + (myMoveStage.height - myImage.height) / 2; //positionement des boutons de resize sur l'image, de la saveZone, etc onConstantMove(); onInitPosition(); } /**
  • HAND CURSOR OPEN
    • /
function onHandCursorInit():void { cursorTimer.start(); cursorTimer.addEventListener(TimerEvent.TIMER, onHandCursorMove); cursorHandOpen.gotoAndStop(1); } function onHandCursorMove(e:TimerEvent):void { if(mouseX > myMoveStage.x && mouseX < myMoveStage.x + myMoveStage.width && mouseY > myMoveStage.y && mouseY < myMoveStage.y + myMoveStage.height && (mouseX < bntResize1.x - bntResize1.width/2 || mouseX > bntResize1.x - bntResize1.width/2 + bntResize1.width || mouseY < bntResize1.y - bntResize1.height/2 || mouseY > bntResize1.y + bntResize1.height - bntResize1.height/2) && (mouseX < bntResize2.x - bntResize2.width/2 || mouseX > bntResize2.x - bntResize2.width/2 + bntResize2.width || mouseY < bntResize2.y - bntResize2.height/2 || mouseY > bntResize2.y + bntResize2.height - bntResize2.height/2) && (mouseX < bntResize3.x - bntResize3.width/2 || mouseX > bntResize3.x - bntResize3.width/2 + bntResize3.width || mouseY < bntResize3.y - bntResize3.height/2 || mouseY > bntResize3.y + bntResize3.height - bntResize3.height/2) && (mouseX < bntResize4.x - bntResize4.width/2 || mouseX > bntResize4.x - bntResize4.width/2 + bntResize4.width || mouseY < bntResize4.y - bntResize4.height/2 || mouseY > bntResize4.y + bntResize4.height - bntResize4.height/2) ){ Mouse.hide(); cursorHandOpen.visible = true; cursorHandOpen.x = mouseX; cursorHandOpen.y = mouseY; }else{ Mouse.show(); cursorHandOpen.visible = false; } } function onHandCursorStop():void { Mouse.show(); cursorHandOpen.visible = false; cursorTimer.reset(); cursorTimer.removeEventListener(TimerEvent.TIMER, onHandCursorMove); } /**
  • LUMINOSITY
    • /
function onLuminosityInit(e:MouseEvent):void { moveTimer.start(); moveTimer.addEventListener(TimerEvent.TIMER, onLuminosityMove); } function onLuminosityMove(e:TimerEvent):void { onBntMove(bntLuminosity, scrollBackLuminosity); luminosity = (bntLuminosity.x - scrollBackLuminosity.x) * 500 / scrollBackLuminosity.width - 255; onFilterMove(); } /**
  • CONTRAST
    • /
function onContrastInit(e:MouseEvent):void { moveTimer.start(); moveTimer.addEventListener(TimerEvent.TIMER, onContrastMove); } function onContrastMove(e:TimerEvent):void { onBntMove(bntContrast, scrollBackContrast); contrast = (bntContrast.x - scrollBackContrast.x) * 2 / scrollBackContrast.width; onFilterMove(); } /**
  • SATURATION
    • /
function onSaturationInit(e:MouseEvent):void { moveTimer.start(); moveTimer.addEventListener(TimerEvent.TIMER, onSaturationMove); } function onSaturationMove(e:TimerEvent) { onBntMove(bntSaturation, scrollBackSaturation); saturation = (bntSaturation.x - scrollBackSaturation.x) * 255 / scrollBackSaturation.width / 100; onFilterMove(); } /**
  • DRAG
    • /
function onDragInit(e:MouseEvent):void { myImageMouseX = mouseX - myImage.x; myImageMouseY = mouseY - myImage.y; moveTimer.start(); moveTimer.addEventListener(TimerEvent.TIMER, onDragMove); } function onDragMove(e:TimerEvent):void { myImage.x = mouseX - myImageMouseX; myImage.y = mouseY - myImageMouseY; if(myImage.x > saveZone.x) myImage.x = saveZone.x; if(myImage.y > saveZone.y) myImage.y = saveZone.y; if(myImage.x + myImage.width < saveZone.x + saveZone.width) myImage.x = saveZone.x + saveZone.width - myImage.width; if(myImage.y + myImage.height < saveZone.y + saveZone.height) myImage.y = saveZone.y + saveZone.height - myImage.height; onConstantMove(); } /**
  • RESIZE
    • /
function onResize1(e:MouseEvent):void { bntResizeHorizontal = 'left'; bntResizeVertical = 'top'; onResizeInit(); } function onResize2(e:MouseEvent):void { bntResizeHorizontal = 'right'; bntResizeVertical = 'top'; onResizeInit(); } function onResize3(e:MouseEvent):void { bntResizeHorizontal = 'right'; bntResizeVertical = 'bottom'; onResizeInit(); } function onResize4(e:MouseEvent):void { bntResizeHorizontal = 'left'; bntResizeVertical = 'bottom'; onResizeInit(); } function onResizeInit():void { onHandCursorStop(); myImageX = myImage.x; myImageY = myImage.y; myImageWidth = myImage.width; myImageHeight = myImage.height; moveTimer.start(); moveTimer.addEventListener(TimerEvent.TIMER, onResizeMove); } function onResizeMove(e:TimerEvent):void { //Resize par le coin a l'echelle hauteur/largeur /*if(bntResizeHorizontal == 'left'){ myImage.width = myImageWidth - (mouseX - myImageX); myImage.x = mouseX; }else{ myImage.width = mouseX - myImageX; } if( myImage.x > saveZone.x){ myImage.width = myImageX + myImageWidth - saveZone.x; myImage.x = saveZone.x; } if(myImage.width + myImage.x < saveZone.width + saveZone.x) myImage.width = saveZone.width + saveZone.x - myImage.x; myImage.height = myImage.width * myImageHeight / myImageWidth; if(bntResizeVertical == 'top') myImage.y = myImageY + (myImageHeight - myImage.height); if( myImage.y > saveZone.y){ myImage.height = myImageY + myImageHeight - saveZone.y; myImage.y = saveZone.y; myImage.width = myImage.height * myImageWidth / myImageHeight; } if(myImage.height + myImage.y < saveZone.height + saveZone.y){ myImage.height = saveZone.height + saveZone.y - myImage.y; myImage.width = myImage.height * myImageWidth / myImageHeight; }*/ //Resize centré if(bntResizeHorizontal == 'left'){ myImage.width = myImageWidth - (mouseX - myImageX)*2; myImage.x = mouseX; }else{ myImage.width = myImageWidth - (myImageX + myImageWidth - mouseX)*2; myImage.x = myImageX + (myImageX + myImageWidth - mouseX); } if(bntResizeVertical == 'top'){ myImage.height = myImageHeight - (mouseY - myImageY)*2; myImage.y = mouseY; }else{ myImage.height = myImageHeight - (myImageY + myImageHeight - mouseY)*2; myImage.y = myImageY + (myImageY + myImageHeight - mouseY); } if( myImage.x > saveZone.x) myImage.x = saveZone.x; if( myImage.y > saveZone.y) myImage.y = saveZone.y; if( myImage.width < saveZone.width) myImage.width = saveZone.width; if( myImage.height < saveZone.height) myImage.height = saveZone.height; onConstantMove(); } /**
  • fonctions constantes
    • /
function onStopMove(e:MouseEvent):void { onHandCursorInit(); moveTimer.removeEventListener(TimerEvent.TIMER, onDragMove); moveTimer.removeEventListener(TimerEvent.TIMER, onResizeMove); moveTimer.removeEventListener(TimerEvent.TIMER, onLuminosityMove); moveTimer.removeEventListener(TimerEvent.TIMER, onContrastMove); moveTimer.removeEventListener(TimerEvent.TIMER, onSaturationMove); moveTimer.reset(); } function onConstantMove():void { bntResize1.x = myImage.x; bntResize1.y = myImage.y; bntResize2.x = myImage.x + myImage.width; bntResize2.y = myImage.y; bntResize4.x = myImage.x; bntResize4.y = myImage.y + myImage.height; bntResize3.x = myImage.x + myImage.width; bntResize3.y = myImage.y + myImage.height; } function onBntMove(bnt:MovieClip, scrollBack:MovieClip):void { bnt.x = mouseX; if(bnt.x > scrollBack.x + scrollBack.width) bnt.x = scrollBack.x + scrollBack.width; if(bnt.x < scrollBack.x) bnt.x = scrollBack.x } function onFilterMove():void { var Red:Number = (1 - saturation) * 0.212671 * contrast; var Green:Number = (1 - saturation) * 0.715160 * contrast; var Blue:Number = (1 - saturation) * 0.072169 * contrast; var RedMove:Number = Red + saturation * contrast; var GreenMove:Number = Green + saturation * contrast; var BlueMove:Number = Blue + saturation * contrast; var colors:Array = new Array(); colors = colors.concat([RedMove, Green, Blue, 0, luminosity]); colors = colors.concat([Red, GreenMove, Blue, 0, luminosity]); colors = colors.concat([Red, Green, BlueMove, 0, luminosity]); colors = colors.concat([0, 0, 0, 1, 0]); var filtre:ColorMatrixFilter = new ColorMatrixFilter(colors); myImage.filters = [filtre]; } /**
  • SAVE
    • /
function onSave(e:Event):void { console.appendText(' > [SAVE]'); bntResize1.visible = false; bntResize2.visible = false; bntResize3.visible = false; bntResize4.visible = false; saveZone.visible = false; var bitmapData:BitmapData = new BitmapData(saveZone.width, saveZone.width, false, 0xffffff); var myRectangle:Rectangle = new Rectangle(saveZone.x, saveZone.y, saveZone.width, saveZone.width); var myMatrix:Matrix = new Matrix(); myMatrix.translate(-saveZone.x, -saveZone.y); bitmapData.draw(this, myMatrix); var jpgEnc:JPGEncoder = new JPGEncoder(100); var bytes:ByteArray = jpgEnc.encode(bitmapData); //myFileRefSave.save(bytes, "xwcvxwcvwxccv.jpg"); var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); var scriptRequest:URLRequest = new URLRequest("http://prod2.sideal.com/braceletsBresiliens/flash/jpg.php?name=sketch.jpg"); //var scriptLoader:URLLoader = new URLLoader(); scriptRequest.requestHeaders.push(header); scriptRequest.method = URLRequestMethod.POST; scriptRequest.data = bytes; //scriptLoader.load(scriptRequest); navigateToURL(scriptRequest); bntResize1.visible = true; bntResize2.visible = true; bntResize3.visible = true; bntResize4.visible = true; saveZone.visible = true; } /**
  • RESET
    • /
function onReset(e:Event):void { console.appendText(' > [RESET]'); onInitWorkspace(); } //BEGIN browser.bntBrowser.addEventListener(MouseEvent.MOUSE_DOWN, onBrowser); onInitPosition();

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
Top30 : il suffit de cliquer sur "avatarMaker.swf" dans la liste pour al voir tourner ;)

Peg'
Admin Codes-Sources
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

Ou peut voir la source tourner ?
Elle est en CS4, et je ne souhaite pas m'y mettre...

Merci...
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Salut,
Et pourquoi ne pas en faire une Classe pour permettre une plus grande ré-utilisabilité du code ainsi qu'une possibilité d'évolution ?
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
ah, encore une chose :

Ton script ne permet pas de faire des "retouches", mais un "Recadrage", "redimensionnement" et un "correction colorimétrique".
Pour faire de la "retouche" il aurait fallu que tu permettes de modifier les pixels un par un et non en global.

Peg'
Messages postés
380
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
28 décembre 2009

Salut,
pareil, j'ai pas eu le temps de mater le code. Mais je suis content car ça y est, enfin une source correcte depuis des mois.

Merci pour le code
A+
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.