RETAILLER UNE IMAGE EN CONSERVANT SES PROPORTIONS

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 5 déc. 2005 à 02:09
naniekrea Messages postés 19 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 25 août 2009 - 21 nov. 2008 à 00:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34917-retailler-une-image-en-conservant-ses-proportions

naniekrea Messages postés 19 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 25 août 2009
21 nov. 2008 à 00:50
trouvé !!
Ecouteur.onLoadInit = function (cible){//trace("initialisé dans : "+cible);
precharge.init("clp_image");
Resize(11,11,cible,110);
contener._rotation+=20;
}
naniekrea Messages postés 19 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 25 août 2009
21 nov. 2008 à 00:28
Heu ... autre question : est-il possible de charger une image et de lui définir un angle (visualisation d'une image oblique)
je ne sais pas si cela est faisable.
merci
naniekrea Messages postés 19 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 25 août 2009
20 nov. 2008 à 23:20
Bonjour,

Ce script est nickel pour apprendre ... mais j'ai une petite question : est il possible de charger une image sans le btn "Chargement" ? heu ... je suis novice est j'essaie de comprendre.

Merci d'avance pour la réponse
Stéphanie
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
6 oct. 2006 à 11:41
Ton idée est en tout cas pas la bonne!!
Voilà une solution par exemple :

var cont:MovieClip = this.createEmptyMovieClip("conteneur", 1);

cont.loadMovie("test.jpg");

function reduire():Void{
cont._xscale cont._yscale cont._xscale*0.4;
}

function deplacer(sens:Number):Void{
clearInterval(id);
this.cont._x += sens;
if(this.cont._x < 150 && sens > 0){
this.id = setInterval(this, "deplacer", 20, 1);
}else if(this.cont._x > 0 && sens < 0){
this.id = setInterval(this, "deplacer", 20, -1);
}else if(this.cont._x >= 150){
this.id = setInterval(this, "deplacer", 20, -1);
}else if(this.cont._x <= 0){
this.id = setInterval(this, "deplacer", 20, 1);
}
}

setTimeout(this, "reduire", 2000);

this.id setInterval(this, "deplacer", 20, 1);
> Remplace le loadMovie par un MovieClipLoader et tu fais la reduction sur l'évènement onLoadInit et tu lances le déplacement sur le même évènement.

Tu colles ça dans un nouveau document flash, tu l'enregistres dans un dossier et dans ce même dossier, il faut juste que tu mettes une image "test.jpg" pour voir ce que ça donne.

@+! Samy
damingo Messages postés 3 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
6 oct. 2006 à 10:53
Euh... Tu fais comment? :)
J'ai essayé pas mal de trucs du genre onEnterFrame qui marche nickel...mais sans le scale. Donc au final, ce que j'ai fais c de mettre une position _x et _y sur chaque frame. Ca fonctionne bien mais j'ai ete obligé deja de mettre mon animation en 120 fps pour que ce soit plus fluide. Le seul probleme est que ca sacade dans tous les cas (qd on fait du frame par frame, y parait que ca fait tjs ca).
Enfin voila! Je recommencerai pas mon animation car elle est trop avancée maintenant mais j'aimerai bien avoir une solution pour peut etre un futur projet. :)
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
6 oct. 2006 à 00:43
Damingo...pour faire un simple déplacement, tu aurais pu le coder en AS et tu aurais pu garder le scale du coup.

@+! Samy
damingo Messages postés 3 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
5 oct. 2006 à 16:54
Bon, j'ai demande a un designer qui m'a repondu que le scale etait incompatible avec le motion tween.
J'ai du tout me tapper frame par frame mais au final ca fonctionne.
ciao :)
damingo Messages postés 3 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
25 sept. 2006 à 14:51
Bonjour,

Pour ma part, cela m'a ete tres utile...
Par contre, j'ai un gros souci: une fois l'image redimensionnee, je n'arrive pas a la deplacer "en animation".
Par exemple, si l'image est en (0,0) a la frame 0 et que je cree une motion jusqu a la frame 10 en deplacant l'image en (100,100), l'image ne bougera pas du tout. Ca fonctionne uniquement si on supprime le scale. :s
Qqun aurait-il une idee?
:)
nicoptere Messages postés 41 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 30 mai 2006
6 févr. 2006 à 07:20
bonjour,

bavard et sans intérêt.

nico
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
8 déc. 2005 à 12:15
Déjà avant d'adapter à ton projet, il faut bien comprendre comment le code fonctionne c'est seulement une fois qu'on a bien compris le mécanisme qu'on pourra adapter à son code.

Pour ton cas, c'est certainement un problème de chemin de notation à point.
Tu n'est pas obligé d'utiliser le fichier AS, tu peux recopier la fonction dans le root de ton code et l'appelé par _root.ma fonction. Voilà sinon je ne vois pas comment t'aider plus dans l'immédiat.
Utilisateur anonyme
8 déc. 2005 à 11:43
Dslé mais je debute en AS et je n'arrive pas a utiliser ta fonction dans mon code.Le code posté plus haut est un fichier .as. au dessu il y a un constructeur et j'apel la classe dans mon fla. Vu le clip "diaporama" qui necessite une taille previsionellle des images pour les afficher, je ne voit pas ou/comment apppeler ta fonction... snif
threep21 Messages postés 69 Date d'inscription samedi 27 décembre 2003 Statut Membre Dernière intervention 29 décembre 2006
7 déc. 2005 à 22:57
nan mais moi je trouve que ça part d'un bon sentiment de faire ses "petits add-on" pour flash. Surtout que c'est bien pratique pour qui veux monter une gallerie. Au moins si ça ne fait pas office de source super top, il suffit pour qui cherche ce code de lire les commentaires et d'apprendre comment on fait.

A defaut d'être une bonne source, c'est un bon tutoriel ^^
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
7 déc. 2005 à 20:48
Merci ! c'est un peu plus honnête (lol) comme note.
C'est une petite source sans prétention qui permet de redimensionner une image avec centrage et dont le code est fonctionnel.
Maitenant on peut toujours optimiser c'est à libre de droits ;-))
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
7 déc. 2005 à 17:54
Pour ma part, ce sera 5/10...la moyenne, mais sans plus. Un MovieClipLoader utilisé tout seul ferait l'affaire.

@+! Samy
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
7 déc. 2005 à 17:22
Et bien cher Ami, il te suffit de regarder comment j'ai fait, mon code répond exactement à tes besoins. IL te suffira de faire une fonction qui récuère les noms d'images à charger depuis un XML par exemple, puis à l'aide d'un bouton tu passes en paramère le nom de l'image à ma fonction d'affichage qui va te positionner parfaitement ton image (quelque soit sa taille) dans un carré dont tu auras donné la position et la taille en pixels !

Je ne poste pas ici pour la note, mais je trouve quand même injuste d'avoir eu 1/10 alors que mon code avec sa fonction de centrage est pleinement fonctionnel (arfff)

Bonne prog ...
Utilisateur anonyme
7 déc. 2005 à 16:59
Zallez ptetre pouvoir m'aider ... je fai un diaporama. jarrive a afficher les images plus ou moin kom jeveux les une a la suite des autres. Mais je n'arrive pas à implementer une fonctionnalité qui retaille en gardan les proportions. HELP ! voici tou le code


var largeur =100;
var hauteur = 100;
var espace =70;
//je sai c crade de definir hauteur largeur la ms g pa su faire autrement pour la barre diaporama...

this.createEmptyMovieClip("diaporama",10);

//l'ordonnée du clip "diaporama". Son abscisse sera définie plus loin par la position du curseur.
diaporama._y = 10;

var infoTof:XML=new XML(); //creer un objet XML
infoTof.ignoreWhite=true; //ignorer les sauts de ligne
infoTof.load("Tofs.xml");//loader le fichier
infoTof.onLoad=function(){
var chemin:String="/racine/photo/Chemin/*";
global.tofs_tab=mx.xpath.XPathAPI.selectNodeList(this.firstChild,chemin); //tableau de tous les chemins des tofs du noeud
for(var i:Number=0;i<_global.tofs_tab.length;i++){
trace(_global.tofs_tab[i]);

var mc = diaporama.createEmptyMovieClip("clip"+i, i);
//définissons les abscisses des clips "photo" contenus dans le clip diaporama

mc._x = espace + (largeur + espace)*i;
mc._y=300;

//nouveau clip vide qui s'appelle "conteneur (contient limage a charger)
mc.createEmptyMovieClip("conteneur",10);
mc.conteneur.loadMovie(_global.tofs_tab[i]);
mc.conteneur._xscale/=5;
mc.conteneur._yscale/=5;

}//for


largeurTotale = _global.tofs_tab.length*(largeur + espace) + espace;

}//onLoad

onMouseMove = function() {
diaporama._x = (600 - largeurTotale)/600*_xmouse;
}
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
7 déc. 2005 à 08:22
Juste pour info:MovieClipLoader, c'est pas nouveau, ça existait déjà en MX2004.
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
6 déc. 2005 à 04:56
Pourrais-tu regarder ma mise à jour, car j'ai modifier mon code pour faire un centrage quelque soit la forme de l'image intégré. Si tu fait des essais avec les différentes images que je joins dans le zip cela va se comprendre tout de suite.
Maintenant si tu te sens l'envie d'optimiser mon code avec les fonction scale de flash, pourquoi pas. En fait j'ai écris ce code dans l'intention de positionner un centrage parfait.
Bien entendu comme je te disais, j'ai eu des problèmes d'écrasement avec ces fonction sous MX.
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
5 déc. 2005 à 03:59
lol, je m'excuse si tu as pris ma motivation pour un peu d'agressivité, mais j'avoue que passer par Moscou pour faire Toulouse/Paris, c'est pas mon truc ...:p
L'important maintenant serait d'alléger ton Flash, car avec si peu de contenu, obtenir une taille de 27Ko en swf à cause de tout les composants qu'il contient c'est dommage, surtout qu'un peu de script te ferait tonber tout ça sous la barre des 5Ko.

Mais je vais pas jouer les chiants ;)

Peg'
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
5 déc. 2005 à 03:53
Bon alors on ne va pas se prendre la tête cher Ami !

Je viens de faire le test avec ta fonction et tu as raison !!
Je viens de créer 2 rectangles et un carré au format jpg avec une grille dedans.
Pas de déformation !!

Pour la version de flash 7 j'avais ce problème d'écrasement de l'image.
Il semble que sous flash 8 le fonction _x/y/scale ne déforme pas l'image.
Enfin il faudrait que je refasse des tests avec mes progs de la version 7 à la version 8 pour voir si la ça coince toujours.
Il est possible que le format de l'image puisse en être la cause (à tester donc).

Ton code est réellement optimisé du fait de l'utilisation des fonctiones _xscale et _yscale, chapeau bas PEGASE31 et surtout à cette heure de la nuit (lol)
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
5 déc. 2005 à 03:13
Je me suis permis de refaire ton resizer.as en plus simple et ça donne ça :

Resize = function (posX, posY, clip, size) {
var Percent = (size/Math.max(clip._height, clip._width))*100;
clip._xscale clip._yscale Percent;
clip._x = posX;
clip._y = posY;
trace("L= "+ clip._width+" H= "+clip._height)
}

Voilà, rien de plus, et ça marche trés bien !

Peg'
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
5 déc. 2005 à 02:57
j'ai essayé avant de te ballancer ce cote .. et avec un rectangle ou pas, ça passe!

Transforme le "_width" de ton clip et trace son "_xscale", tu verras que tu auras le % de "retaillage", comme tu dis.
A partir de là, tu pourras l'appliquer à ton "_yscale".

Je vais pas me planter sur un truc aussi basique, tout de même...

Peg'
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
5 déc. 2005 à 02:36
Cher Amis, cette fonction à pour but de transformer la taille d'une image quelque soit sa forme.
Dans ton cas, pour un carré c'est le bon code, mais pour un rectangle en longueur ou en hauteur tu auras une déformation !!

Fait un petit essai avec ton code sur une image rectangulaire tu auras une surprise.
Je pense que je n'ai peut-être pas bien expliqué ou tu n'as peut-être pas tout lu en entier.

J'ai volontairement parlé de rectangle en longueur pour éviter d'écrire rectangle dont L>h afin que tout le monde puisse comprendre.

Moralité, il faut bien poser le problème avant d'appliquer une formule. J'en parlais à un Ami mathématicien il y a cinq minutes o tel (lol) qui me disait justement que la tarre des développeurs moderne, outre l'absence partielle ou totale de codes explicites, est qu'ils ne font jamais ou peu d'études ou d'algorithmes avant d'attaquer leur prog. Leurs petits doigts frénétiques subissant les démangeaisons impulsives causées par l'empressement d'aboutir avant d'avoir commencé (lol). Ce qui fait que beaucoup plus tard, personne ne peut exploiter le code avant de longues heures pour comprendre le cheminement du dev ou les subtilités du prog et ce, sourtout dans le cas d'un projet de grande taille, comprenant de nombreuses fonctions et unités. J'ai eu ce problème lol et je travaille à me corriger en documentant mes sources (sauf quand cela est explicite), en créant une étude en .doc.
Je gagne ainsi un temps fou pour adapter une de mes sources à une appli particulière.

Voilà pour la petite philosophie nocturne (mea culpa).
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
5 déc. 2005 à 02:09
Question conne : pourquoi ne pas avoir utilisée "_xscale" et "_yscale" plutôt qu'une règle de 3 appliquée au pixel ?

Tu veux une image de 500 pixels de large et qu'elle garde sa proportion ? Ben fais comme ça :

MonClip._width = 500;
MonClip._yscale = MonClip._xscale;

Peg'
Rejoignez-nous