IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Réduire un jpg avant de le copier ? [Débutant(e)]


Sujet :

Flex

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Points : 16
    Points
    16
    Par défaut Réduire un jpg avant de le copier ?
    Bonjour,
    j'essaie de réaliser une petite application de gestion des stocks. Chaque article peut-être associé à une photo que l'utilisateur choisit.
    J'utilise la classe File pour choisir la photo et la copier dans le répertoire applicationStorageDirectory.

    Dans l'appli., les photos sont des vignettes qui ne dépassent pas les 100 pixels en hauteur et largeur. Je me dis que c'est dommage de stocker une photo de plusieurs méga qui au final ne sera utilisée que sur quelques pixels.

    Comment réduire la taille de la photo, avant de la stocker dans le répertoire de l'application svp ?

    Merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Salut
    J'utilise pngencoder pour génrer des vignettes, mais attention mon appli date de 3 ans, peut-être que tu trouveras d'autres biblios plus performantes aujourd'hui

    je te donne une copie de mon code mais attention il ne fait pas seulement ce que tu souhaites mais des choses qui concernent mon appli et dont tu n'as surement pas besoin; mais ça te donne une idée de comment faire.

    Mon code une fois la photo uploadée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    private function chargementTermine(evt:Event):void
    {
     
    	var objLoaderInfo:LoaderInfo = evt.currentTarget as LoaderInfo;
    	//trace('loaderinfo:',objLoaderInfo.bytesTotal,  int(objLoaderInfo.bytesTotal / 1024), objLoaderInfo.width, objLoaderInfo.height, objLoaderInfo.url, objLoaderInfo.contentType);
     
    	// image chargée
    	var image:Bitmap = evt.currentTarget.content as Bitmap;
    	// on garde la taille de l'image
    	dpFiles[_ind].w = image.width;
    	dpFiles[_ind].h = image.height;
    	//voir si l'on doit ou pas créer la vignette
    	var maVignette:File = _appDir.resolvePath("monappli/projets/aux_vignettes/" + dpFiles[_ind].nom_vignette );
     
    	// nouveau bitmapdata de la taille de la vignette
    	bitmapData = new BitmapData(100,100);
    	var rate:Number;
    	var _tx:Number, _ty:Number = 0;
    	if (image.width > image.height)  {
    		rate = (image.width / 100);
    		_tx=0;
    		_ty = ((image.width - image.height)/2);
    	}
    	else {
    		rate = (image.height / 100);
    		_ty=0;
    		_tx = ((image.height - image.width)/2);
    	}
    	//trace('rate',rate)
    	ma = image.transform.matrix;
    	ma.tx = _tx;
    	ma.ty = _ty;
    	ma.scale(1/rate,1/rate);
     
    	bitmapData.draw(image, ma);
     
    	var ba:ByteArray = new ByteArray();
    	try {
    		ba = PNGEncoder.encode(bitmapData);
    	}
    	catch (e:Error) {
    		Alert.show("Attention nous rencontrons de problèmes de mémoire lors de la création des vignettes. Fermez tous vos applicatifs lourds et relancez lisxpert. Merci","Erreur d'encodage");
    		ba = PNGEncoder.encode(bitmapData);
    	}
     
    	savePicture( ba, _nomVignette );
    	image = null;
    	ba.clear();
    	ba = null;
     
    	btn3.visible = true;
     
    }
    et puis la fonction savePicture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    private function savePicture( pBytes:ByteArray, pExt:String ):void
    {	
    	var newImage:File = _appDir.resolvePath("monappli/projets/aux_vignettes/" + pExt );
    	// on garde les liens vers les vignettes
    	//trace('source',dpFiles[_ind].source);
    	dpFiles[_ind].source_vignette = File.documentsDirectory.url+"/monappli/projets/aux_vignettes/" + _nomVignette;
    	dpFiles[_ind].nom_vignette = _nomVignette;
    	fileStream = new FileStream();	
    	fileStream.addEventListener(Event.COMPLETE, fileComplete);
    	fileStream.addEventListener(IOErrorEvent.IO_ERROR, fileError);
    	fileStream.addEventListener(Event.CLOSE, fileClosed);
    	fileStream.open( newImage, FileMode.WRITE );	
    	//Alert.show("message 6 avant writebytes:" + pExt);
    	fileStream.writeBytes( pBytes );
    	fileStream.close();
    	fileStream = null;
    	bitmapData.dispose();
    	bitmapData = null;
    	_ind++;
    	_ind2++;
    	elementSuivant();
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2013, 15h55
  2. Modifier des éléments avant de les copier
    Par VinnieMc dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 30/07/2008, 14h41
  3. Copier toute les images jpg et bmp d'un répertoire
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 08/09/2006, 16h00
  4. [VBA-E]Copier avant d'effacer
    Par tarmin dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/01/2006, 13h29
  5. Modifier la taille d'un jpg avant SaveToFile
    Par Michel_57 dans le forum Langage
    Réponses: 5
    Dernier message: 20/07/2004, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo