Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité régulier
    Inscrit en
    octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : octobre 2010
    Messages : 10
    Points : 8
    Points
    8

    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 confirmé
    Inscrit en
    janvier 2006
    Messages
    824
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 824
    Points : 285
    Points
    285

    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 :
    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 :
    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();
    }

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •