Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RETAILLER UNE IMAGE EN CONSERVANT SES PROPORTIONS


Information sur la source

Catégorie :ActionScripts Classé sous : flash8, moviecliploader, retailler, image, proportion Niveau : Expert Date de création : 05/12/2005 Date de mise à jour : 05/12/2005 11:18:56 Vu / téléchargé: 15 773 / 3 419

Note :
6,33 / 10 - par 3 personnes
6,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bonjour les Amis !!
Voici une petite source qui permet de redimensionner une image en conservant ses proportions sous FLASH 8 (utilisation de (MovieClipLoader).

 

Source

  • La classe resizer contient la fonction : Resize avec laquelle on lui passe en paramètres dans cet ordre :
  • La position d’affichage en x de l’image
  • La position d’affichage en y de l’image
  • Le clip de réception
  • La taille en pixel voulue.
  • • J’utilise MovieClipLoader qui est bien pratique puisqu’il permet de créer à la volée un clip vide pour positionner notre image.
  • • J’ai écris en plus une fonction de gestion d’erreur (bien pratique lorsque l’image n’est pas présente) Il suffira de récupérer le code d’erreur et de le traduire en Français à l’aide par exemple d’un switch (Error) et de connecter sur la traduction en fonction du code d’erreur.
  • • J’ai également mis la fonction onLoadComplete avec la récupération de la taille en octets de l’image (ça sert toujours par exemple pour ‘ préloader’ et faire patienter vos visiteurs). Vous pouvez également utiliser ma source qui permet de charger des clips à la queue leuleu pour éviter de consommer toute la bande passante de la connexion internet de vos chers visiteurs ;-))
  • • Enfin il suffit de lancer l’appli pour voir ce que ça donne
La classe resizer contient la fonction : Resize avec laquelle on lui passe en paramètres dans cet ordre :
La position d’affichage en x de l’image
La position d’affichage en y de l’image
Le clip de réception
La taille en pixel voulue.

•	J’utilise MovieClipLoader qui est bien pratique puisqu’il permet de créer à la volée un clip vide pour positionner notre image.
•	J’ai écris en plus une fonction de gestion d’erreur (bien pratique lorsque l’image n’est pas présente) Il suffira de récupérer le code d’erreur et de le traduire en Français à l’aide par exemple d’un switch (Error) et de connecter sur la traduction en fonction du code d’erreur.
•	J’ai également mis la fonction onLoadComplete avec la récupération de la taille en octets de l’image (ça sert toujours par exemple pour ‘ préloader’ et faire patienter vos visiteurs). Vous pouvez également utiliser ma source qui permet de charger des clips à la queue leuleu pour éviter de consommer toute la bande passante de la connexion internet de vos chers visiteurs ;-))
•	Enfin il suffit de lancer l’appli pour voir ce que ça donne 

Conclusion

Votre image sera positionnée exactement là où vous le désirez et à la taille voulue en pixels.

J’ai mis dans la source 3 images (un rectangle en longueur, 1 en largeur et un carré pour bien constater que l’image ne subit pas d’écrasement ou d’étirement après sa retaille).
Je précise que l’image sera retaillée en longueur ou en largeur suivant sa forme.
Par exemple on retaillera un rectangle long sur sa longueur et un rectangle haut sur sa hauteur.
Pour un carré, c’est le plus simple car la proportion est de 1 !

On pourrait directement donner le pourcentage de l’image ou préciser si on veut un agrandissement ou une réduction sur la longueur ou sur la hauteur.
A vous d’améliorer ce code pour ce faire ….

A bientôt ….

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

05 décembre 2005 11:18:56 :
Je propose maintenant un préchargement sur l'image ainsi qu'un centrage dans un carré de 200x200 pixels et ce, quel que soit la forme de l'image. Je donne en exemple un carré (c.jpg, un rectangle long (l.jpg) et un rectangle haut (h.jpg) pour observer le centrage. Bien entendu, il faut toujours indiquer dans la fonction Resize(11,11,cible,200) les coordonnées du carré de positionnement ainsi que sa dimension (ici 200 pixels). Pour bien voir le préchargement, utilisez une image assez lourde de (1 ou 2Mo)en donnant l'url de votre site dans la fonction : chargeur.loadClip(""http://wotre.site.com/image_lourde.jpg", contener); Vous pouvez simuler le téléchargement en local depuis flash également.

Commentaires et avis

signaler à un administrateur
Commentaire de pegase31 le 05/12/2005 02:09:08 administrateur CS

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'

signaler à un administrateur
Commentaire de Loubiou le 05/12/2005 02:36:49

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).

signaler à un administrateur
Commentaire de pegase31 le 05/12/2005 02:57:31 administrateur CS

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'

signaler à un administrateur
Commentaire de pegase31 le 05/12/2005 03:13:25 administrateur CS

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'

signaler à un administrateur
Commentaire de Loubiou le 05/12/2005 03:53:24

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)

signaler à un administrateur
Commentaire de pegase31 le 05/12/2005 03:59:03 administrateur CS

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'

signaler à un administrateur
Commentaire de Loubiou le 06/12/2005 04:56:30

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.

signaler à un administrateur
Commentaire de goldenboy68 le 07/12/2005 08:22:34

Juste pour info:MovieClipLoader, c'est pas nouveau, ça existait déjà en MX2004.

signaler à un administrateur
Commentaire de petitelarve le 07/12/2005 16:59:08

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;
}

signaler à un administrateur
Commentaire de Loubiou le 07/12/2005 17:22:49

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 ...

signaler à un administrateur
Commentaire de goldenboy68 le 07/12/2005 17:54:27

Pour ma part, ce sera 5/10...la moyenne, mais sans plus. Un MovieClipLoader utilisé tout seul ferait l'affaire.

@+! Samy

signaler à un administrateur
Commentaire de Loubiou le 07/12/2005 20:48:24

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 ;-))

signaler à un administrateur
Commentaire de threep21 le 07/12/2005 22:57:55

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 ^^

signaler à un administrateur
Commentaire de petitelarve le 08/12/2005 11:43:31

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

signaler à un administrateur
Commentaire de Loubiou le 08/12/2005 12:15:29

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.

signaler à un administrateur
Commentaire de nicoptere le 06/02/2006 07:20:35

bonjour,

bavard et sans intérêt.

nico

signaler à un administrateur
Commentaire de damingo le 25/09/2006 14:51:09

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?
:)

signaler à un administrateur
Commentaire de damingo le 05/10/2006 16:54:07

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 :)

signaler à un administrateur
Commentaire de goldenboy68 le 06/10/2006 00:43:24

Damingo...pour faire un simple déplacement, tu aurais pu le coder en AS et tu aurais pu garder le scale du coup.

@+! Samy

signaler à un administrateur
Commentaire de damingo le 06/10/2006 10:53:29

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. :)

signaler à un administrateur
Commentaire de goldenboy68 le 06/10/2006 11:41:00

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

signaler à un administrateur
Commentaire de naniekrea le 20/11/2008 23:20:42

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

signaler à un administrateur
Commentaire de naniekrea le 21/11/2008 00:28:15

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

signaler à un administrateur
Commentaire de naniekrea le 21/11/2008 00:50:02

trouvé !!
Ecouteur.onLoadInit = function (cible){//trace("initialisé dans : "+cible);
              precharge.init("clp_image");
              Resize(11,11,cible,110);
  contener._rotation+=20;
}

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

manipulation d'image avec MovieClipLoader [ par redisnotdead ] Salut a tous, mon but est de faire une sorte de portofolio tout simple, aliment&#233; par un XML avec dedans les info du genre "image, texte". Le char Eval("bouton_"+i+".image_"+i) et MovieClipLoader() [ par yosh ] Bonjour &#224; vous Je gal&#232;re depuis un moment sur le movieClipLoader, en fait j'essaye de modifier la taille d'une image compris dans un butto problème de déplacement d'image [ par TeTralex ] Bonjour, je d&#233;bute en flash et je rencontre&nbsp;un probl&#232;me.Je suis en train de cr&#233;er ma premi&#232;re animation flash qui est en fait Un gros problème de gestion d'images dans flash [ par rocketknight ] Salut &#224; tous !Me voila bien ennuy&#233; :J'appelle par le biais de ce code : photo.loadMovie("test.jpeg",0);une image "test.jpg" <FONT Question sur preloade et fondu [ par xtravaganza ] Bonjour,Voici mes deux questions :Le site commence sur une page HTML index, o&#249; un logo appara&#238;t, puis &#224; partir d&#146;un mouvement de l exportation ou impression d'image !!!! [ par foufidou ] bonjour je cree en ce moment un outil de personalisation de T-shirt pour une societ&#233; je voudrait que lorsque l'utilisateur ai corectement personn Quel est le meilleur format d'importation d'image dans Flash? [ par goldenboy68 ] Salut, ...je m'explique: moi qui suis pas graphiste pour un rond, j'ai appliqu&#233; quelques effets &#224; une forme sous FireWorks (comme c'est Mac Chargement image aleatoire [ par jultoys ] Salut, je cherche le moyen pour que flash puisse me loader dans un movieclip des images a partir d un dossier externe et ce de maniere aleatoire... J' Charger une image au hazard [ par twinsen60 ] BonjourVoil&#224;, je cr&#233;er un site internet (pas encore en ligne), par le biais de Flash Mx.Il fonctionne tr&#232;s bien, mais j'aimerai que sur Reculer d une image... [ par jultoys ] Chalut les flasheurs,j'ai besoin de ceci, un bouton qui permet de faire avance un clip de une image et un bouton pour que ce meme clip recule d une im


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.