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 !

SOLUTION A LA CONTRAINTE DU FORMAT UNIQUE EN CHARGEMENT D'IMAGE (LE JPG "NON PROGRESSIVE")


Information sur la source

Catégorie :Astuces Niveau : Débutant Date de création : 19/05/2004 Date de mise à jour : 30/05/2004 12:17:22 Vu : 8 962

Note :
9,86 / 10 - par 7 personnes
9,86 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Beaucoups de flasheurs sont emmerdés a cause de la contrainte qu'impose macromedia avec loadMovie().
On ne peut charger que des jpg "non progressive".
Le probleme, c'est que sur certains contrats, on doit charger des images gif par exemple (tres frequent) ou png. Flash ne charge pas ces formats.
Je vous propose donc une solution non pas en flash, mais en php.

Non, je ne me suis pas trompé de site, et je ne posterai pas ce code sur phpcs, car c'est aux flasheurs que j'adresse ce code.
 

Source

  • <?php
  • # begin-configuration
  • $maxWidth = 200;
  • $maxHeight = 200;
  • # end-configuration
  • header("Content-Type: image/jpeg");
  • // amelioration de detection de l'extention par Bricomix
  • $ext = strtolower(substr($pic, strrpos($pic, '.') + 1));
  • switch($ext) {
  • case "jpg":
  • case "jpeg":
  • $img_in = imagecreatefromjpeg($pic);
  • break;
  • case "gif":
  • $img_in = imagecreatefromgif($pic);
  • break;
  • case "png":
  • $img_in = imagecreatefrompng($pic);
  • break;
  • default:
  • }
  • list($width, $height, $type, $attr) = getimagesize($pic);
  • if (empty($noresize)) {
  • $ratio = $width/$height;
  • if ($ratio>=0) {
  • $nw = $maxWidth;
  • $nh = $maxHeight/$ratio;
  • } else {
  • $nw = $maxWidth/$ratio;
  • $nh = $maxHeight;
  • }
  • } else {
  • $nw = $width;
  • $nh = $height;
  • }
  • $img_out = imagecreatetruecolor($nw, $nh);
  • imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
  • $t = imagejpeg($img_out);
  • echo $t;
  • ?>
<?php
# begin-configuration
$maxWidth 	= 200;
$maxHeight 	= 200;
# end-configuration

header("Content-Type: image/jpeg");
// amelioration de detection de l'extention par Bricomix
$ext = strtolower(substr($pic, strrpos($pic, '.') + 1));
switch($ext) {
	case "jpg":
	case "jpeg":
		$img_in = imagecreatefromjpeg($pic);
		break;
	case "gif":
		$img_in = imagecreatefromgif($pic);
		break;
	case "png":
		$img_in = imagecreatefrompng($pic);
		break;
	default:
	
}
list($width, $height, $type, $attr) = getimagesize($pic);
if (empty($noresize)) {
	$ratio = $width/$height;
	if ($ratio>=0) {
		$nw = $maxWidth;
		$nh = $maxHeight/$ratio;
	} else {
		$nw = $maxWidth/$ratio;
		$nh = $maxHeight;
	}
} else {
	$nw = $width;
	$nh = $height;
}
$img_out = imagecreatetruecolor($nw, $nh);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));

$t = imagejpeg($img_out);
echo $t;

?>

Conclusion

Ce script va resoudre vos problemes.
seul contrainte, il ne charge que les images sur le meme server que le script. (ce qui est le cas la pluspart du temps).

l'utilisation est simple:
- pour convertir un gif, un png ou un jpg "progressive" en jpg "non progressive":
loadMovie("img.php?pic="+imageURL+"&noresize=true");

- pour convertir un gif, un png ou un jpg "progressive" en jpg "non progressive", et la redimentionner en gardant les proportions:
loadMovie("img.php?pic="+imageURL);
Dans ce dernier cas, vous devez configurer le script php pour specifier la hauteur et la largeur maximum.

Je ne met pas de source d'exemple car ceux qui ont ce probleme savent se servir de loadMovie
 

Commentaires et avis

signaler à un administrateur
Commentaire de SuperDevy le 20/05/2004 16:33:49

Alors là, chapeau...
Depuis le temps que je me fais ch.. à convertir toutes mes images. Je sens que je vais faire des économies de temps.

Je ne l'ai pas encore testé, mais j'ai l'impression que ça va être pas mal du tout.

                                        --[10/10]--

signaler à un administrateur
Commentaire de BlackWizzard le 20/05/2004 16:38:54 administrateur CS

j'ai oublié de preciser que ce script ne tourne que si vous disposez de la librairie GD2 (a cause de imagecreatetruecolor()).

signaler à un administrateur
Commentaire de Bricomix le 29/05/2004 10:54:15

Petite erreur ;)

Tu as mis cette ligne : case "peg"

Je pense que c'est case "jpeg" :)

signaler à un administrateur
Commentaire de BlackWizzard le 29/05/2004 10:57:33 administrateur CS

non, ya pas d'erreur...
regarde le code:
$ext = substr($pic, -3);
donc, si le fichier est .jpeg et non pas .jpg, alors $ext sera "peg".

signaler à un administrateur
Commentaire de Bricomix le 29/05/2004 11:04:47

Alors dans ce cas je pense que le mieux est de remplacer "$ext = substr($pic, -3);" par "$ext = strtolower(substr($pic, strrpos($pic, '.') + 1))"

Ainsi tu récupères vraiment l'extension et de plus avec ta solution, il suffit que l'extension soit ".jpG" pour que ça ne fonctionne pas...

Tu peux donc ensuite replacer par "jpeg" :)

signaler à un administrateur
Commentaire de BlackWizzard le 29/05/2004 11:14:05 administrateur CS

et si l'image est pic.02.04.jpg? ya pleins de points ça marche pas... je prefere ma solution, avec un strtolower si tu vx...

signaler à un administrateur
Commentaire de Bricomix le 29/05/2004 12:40:20

strrpos() renvoie la position de la dernière occurence ;)

Ainsi tu aruas jpg même avec pic.02.04.jpg :) Je viens de tester et ça fonctionne parfaitement...

signaler à un administrateur
Commentaire de BlackWizzard le 29/05/2004 12:50:56 administrateur CS

ok, alors oubliez tout ce que je vien de dire ;)

signaler à un administrateur
Commentaire de bongawonga le 29/05/2004 17:41:33

Chapeau bas, honorable BW, ton PHP va m'etre vraiment tres utile
parcontre je vois pas qu'est-ce que la librairie GD2?

Si tu n'y vois pas d'objection, j'aimerais beaucoup l'intégrer à ma source "open panda gallery". voici le lien:
http://www.flashkod.com/code.aspx?ID=23023

ps: Mais comment qui fait BW pour aussi fort??
il mange tous les matins 1kg de colins pannés de chez capitain Glou, bien sûr


signaler à un administrateur
Commentaire de BlackWizzard le 29/05/2004 19:03:14 administrateur CS

mdr ;)
GD2 c une librairie de php. si le script fonctionen chez toi, te pose pas de question ;)
au cas ou, regarde le phpinfo de ton server... il indique les librairies installés.
Pour open panda gallery, heu.... bof...  je sais pas trop... va-y! c là pour ça!! ;)

signaler à un administrateur
Commentaire de Bricomix le 30/05/2004 12:15:27

Arf encore une petite erreur... à la fin de la ligne "$ext = strtolower(substr($pic, strrpos($pic, '.') + 1))" tu as mis un " au lieu d'un ;

signaler à un administrateur
Commentaire de BlackWizzard le 30/05/2004 12:17:03 administrateur CS

arf...

signaler à un administrateur
Commentaire de Bricomix le 30/05/2004 12:19:39

Rien de grave... ;)

Y'a toujours des jours où il vaudrait mieux ne pas lancer l'ordi :D

signaler à un administrateur
Commentaire de BlackWizzard le 30/05/2004 12:21:13 administrateur CS

ne pas allumer l'ecran plutot... le pc lui est allumé depuis je sais plus combien de semaines ;)

signaler à un administrateur
Commentaire de Crazyx le 11/04/2005 08:50:47

BlackWizzard ton script est tout simplement sublime. Non seulement il m'a permis de passer outre le probleme que j'ai de redimensionnement des Jpg chargé grâce à LoadMovie (je te raconte pas c'etait la galère mais tu ne t'imagine même pas)  mais en plus il m'a permis de créer ma gallerie photo sans contrainte (jpg progressif, gif) et sans que j'ai à me préoccupé du redimensionnment ( tes variables max weight et width) .
Tout simplement sublime ! par contre en voyant la date ton script date d'un AN ???? j'ai vraiment été stupide de me prendre la tête des semaines pour rien ! Chapeau bien bas monsieur !

signaler à un administrateur
Commentaire de BlackWizzard le 11/04/2005 16:00:45 administrateur CS

deja un an :|
waow...
ça passe trop vite le temps!

content que ça servent a quelqun!

signaler à un administrateur
Commentaire de Crazyx le 12/04/2005 00:29:12

A mon avis je vé faire un lien vers cette page sur le forum parce que y'a tellement de gens qui arrivent toujours pas à charger des gifs ! :S ! En tout cas moi ca m'a vraiment dépanné merci encore

signaler à un administrateur
Commentaire de SilverMaster le 23/06/2005 03:16:51

Mais dites... il doit bien y avoir un inconvéniant, non ? Sinon moi je ne génère plus jamais de miniature opur mes galeries ! (html ou autre, j'précise)

Parce que à ce que j'ai compris : ça occupe pas de place sur le disque et ça prend la même bande passante qu'une image miniature... pis sur un mutu osef des ressources (:p) donc heu... ?!

signaler à un administrateur
Commentaire de darktaek le 25/08/2005 16:28:24

Il y avait un petit truc qui me chiffonnait mais apparemment ça marche.

On peut charger des images d'un site distant à condition que le php y soit

Exemple :

le site http://machin.free.fr contient img.php et img.png sur sa racine et le site http://www.truc.com contient img.swf
Dans le load movie il suffit de mettre l'url absolue du php pour pouvoir afficher img.png
loadMovie("http://machin.free.fr/img.php?pic="+"img.png");

Mais du coup ça ne reste fesable qu'avec un espace qui nous appartient (pour y mettre le php)
Enfin bref pour moi ça sera utile et ce code c'est du pain béni.

signaler à un administrateur
Commentaire de CChargy le 16/09/2005 21:16:04

Et pour la transpârence sur les images png, cela donne koi?
Comment on la remet dans flash?

Colin CHARGY

signaler à un administrateur
Commentaire de BlackWizzard le 17/09/2005 00:42:59 administrateur CS

on ne peut pas remettre la transparence.
Par contre, flash 8 charge tous les format desormais, avec la transparence.

signaler à un administrateur
Commentaire de Knolan le 12/10/2005 11:16:35

Je suis en train d'utiliser ton code un peu modifié pour qu'il redimenssionne tout le tps mon image, et je me suis rendu compte d'un truc c'est que le redimenssionnement se faisait mal quand la hauteur etait plus grande que la largeur.
exemple: une image de 1200*1600 me donnait une image de 100*133
explication:
quand tu divise par un chiffre inférieur a 1 tu multiplie par son inverse en fait, donc faut multiplier quand tu te retrouve avec un ratio inférieur a 1 et comme tu étalonne tout le tps sur la largeur, ben ca foirait :(

J'ai un peu modifié ta source, ca donne ca (les lignes 27 et 31 ont changé)
if ($ratio >= 1) {
$nw = $maxWidth;
$nh = $maxHeight/$ratio;
} else {
$nw = $maxWidth*$ratio;
$nh = $maxHeight;
}

chez moi ca marche bien comme ca :)
voila j'espere que ca pourra servir à des gens :)

signaler à un administrateur
Commentaire de BlackWizzard le 13/10/2005 16:58:22 administrateur CS

j'avais detecté ce bug egalement, et je l'ai corrigé ya deja longtemps, mais je n'avais pas pensé a updater le code.
Merci de preciser la correction ;)

signaler à un administrateur
Commentaire de lOeil le 23/05/2006 10:32:38

je ne comprend pas une ligne

case "jpg":


Pourquoi tu n'effectues pas d'actions si l'extension est jpg ?

signaler à un administrateur
Commentaire de BlackWizzard le 23/05/2006 15:10:47 administrateur CS

#     case "jpg":
#     case "jpeg":
#         $img_in = imagecreatefromjpeg($pic);
#         break;


Dans un switch, le code s'execute jusqu'a la fin du switch ou jusqu'à l'apparition d'une instruction "break;"
Dans le cas ci-dessus, si l'extention est "jpg", le code va continuer à s'executer jursqu'à l'instruction "break;".
ça permet de ne pas repeter le code ;)

signaler à un administrateur
Commentaire de lOeil le 29/05/2006 13:47:29

merci pour cette explication, cela va pouvoir aléger mon code par moment :)

signaler à un administrateur
Commentaire de hayman le 01/11/2007 19:46:47

Bonjour bonjour! Moi, je suis un noob (autant le dire directement) J'ai lu ves comentaires et jvoulai savoir
si on pouvait me redoner le code "sans erreurs",( ou me donner une sources comprehensible et simple)
et me dire où faut-il metre ce code. J'ai un petit site qui était sur le point d'ouvrir ses porte jusqu'au moment où,
aprés avoir transféré mes image sur "free", je m'apercois qu'aucune image ne se charge...

Merci d'avance! jspr ke le moyen d'y parvenir est simple!

signaler à un administrateur
Commentaire de CChargy le 02/11/2007 22:52:41

Bonjour bonjour!
Revenons sur ton problème mon cher ...
Tu bosse avec quel Flash ? 7, 8, MX ?
Il y a très longtemps que je n'ai touché a flash, donc dites moi si je me trompe!
Sous Flash 8, => Pas de problème avec les formats (BW m'as fait la remarque plus haut).
Sous 7/MX => Le code est en haut et à jour il me semble, tu n'as qu'a te servir...
Sous Flash < 7 => Je ne peux pas t'aider, mais je peux te conseiller de te mettre à jour ...

En tous cas, bravo à BW pour ce code (vieux!) mais utile....
Bonne prog!
En espérant t'avoir aider
A+
Colin  CHARGY

signaler à un administrateur
Commentaire de hayman le 03/11/2007 14:32:24

c'est a dire ke jutilise flash 8 héhé! mais bon en tant ke debutant c normal ke tou les élément flash se dechaine contre mes prjes!! ^^ jvais essayer de me debrouiller, jvou dirai si je bloke!

signaler à un administrateur
Commentaire de emyyy le 28/12/2007 16:38:37

salut
si vous pouvez m'aider
je charge des image sur un movie clip vide k j'ai creer en fllash
j'utilise flash8 mé qd mm les gif ca n marche pas voici mon code de chargement

  _root.onLoad=function(){
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
mcLoader.loadClip(_root.url_pictures, conteneur);
}

je charge depuis le fichier php "list-new.php" qui recupere les images de la bdd
voici le code

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase=  "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="390" height="382">
  <param name="movie" value="images/zooom.swf">
  <param name="quality" value="high">
  <param name="url_pictures" value="<?echo $map_name ; ?>" />
   <embed  src="images/zooom.swf?url_pictures=<?echo $map_name ; ?>"
quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="390" height="382"></embed>
</object>


lorsque je met au lieu de ca <?echo $map_name ; ?> le lien d'une image jpg dans la base ca marche par contre lorsque je met le lien d'une gif non


jaimerai savoir si mon code est sufisant pour charger ca <?echo $map_name ; ?> et si ya une solution pr charger des gif xar ma base contient des milier d'image gif.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

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,296 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é.