Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/12/2012, 09h36   #1
proto38
Invité régulier
 
Inscription : 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
proto38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2013, 14h07   #2
Garra
Membre confirmé
 
Inscription : janvier 2006
Messages : 751
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 751
Points : 239
Points : 239
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();
}
Garra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h45.


 
 
 
 
Partenaires

Hébergement Web