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 !

MINIATURES (THUMBNAILS) AUTOMATIQUES


Information sur le tutorial

Catégorie :Graphique Date de création : 21/10/2005 02:52:33 Vu : 11 588 fois

Note :
8,5 / 10 - par 8 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Je vous propose une petite introduction à l'utilisation de la librairie GD pour php, autour d'un thème récurrent : la création de miniatures à la volée.

Tutorial

Introduction

Voici un tuto pour les feignants :]

Pour ceux qui ont la flemme d'ouvrir leur éditeur graphique préféré, et de créer manuellement les miniatures (thumbnails) qui agrémenterons sympathiquement leur galerie.

Mais aussi pour ceux qui viennent de découvrir que grâce à une librairie, on pouvait faire du traitement d'image via php.

En effet, ce tutorial s'adresse à des personnes ayant déjà certaines bases en php (si la première chose qui t'es venue à l'esprit, quand j'ai parlé de librairie, est une espèce de magazin remplis de bouquins poussiéreux, passe ton chemin!)

Entrons dans le vif du sujet.

Liste des fonctions

Nous allons utiliser la très célèbre librairie GD qui fournis une série de fonctions de traitement de l'image. Pour ce tutorial, on utilisera :

Utilisation de ces fonctions

Première étape : Créer les ressources

Elle consiste a créer la variable $base et $support et d'y stocker les données de l'image de base et de l'image qui va nous servir de support.

$base = imagecreatefromjpeg('tutophp_base.jpg');
$support = imagecreatetruecolor(200,200);

image de baseimage servant de support

deuxième étape : déterminer la zone a copier

  • $x_copie : la distance horizontale entre le bord de l'image de base et la zone à copier
  • $y_copie : la distance verticale entre le bord de l'image de base et la zone à copier
  • $w_copie : la largeur de la zone à copier
  • $h_copie : la hauteur de la zone à copier

mésures pour la copie

troisième étape : déterminer la zone où coller

  • $x_colle : la distance horizontale entre le bord du support et de la zone de collage
  • $y_colle : la distance verticale entre le bord du support et de la zone de collage
  • $w_colle : la largeur de la zone de collage
  • $h_colle : la hauteur de la zone de collage

mésures pour le collage

quatrième étape : copier/coller

Maintenant, il suffit d'utiliser une fonction qui va copier la zone définie à la deuxième étape et la coller sur le support dans la zone définie à la troisième étape.

Si les mesures de la zone de collage ne sont pas proportionnelles à la zone copiée, l'image sera étirée pour s'y adapter.

imagecopyresampled(
$support,$base,
$x_colle,$y_colle,$x_copie,$y_copie,
$w_colle,$h_colle,$w_copie,$h_copie
);

collage

cinquième étape : exporter

Maintenant, $support contient le résultat du collage. Il faut donc exporter cette ressource dans un fichier.

imagejpeg($support,'totuphp_resultat.jpg',100);

Et voila =)[4]

résultat

Application à la création de miniature

getimagesize()

Cette fonction sert a renvoyer dans un tableau les information de l'image passée en paramètre (via son URL biensûr)

getimagesize('tutophp_base.jpg');

Va renvoyer

Array ( 
0 => 278,
1 => 220,
2 => 2,
3 => 'width="278" height="220"',
'bits' => 8,
'channels' => 3
)

Il s'agit donc de :

  • 0 : la largeur
  • 1 : la hauteur
  • 2 : le type [5]
  • 3 : une chaine de caractère contenant la largeur et la hauteur (pour les balises <img />)
  • 'bits' : le nombre de bits pour chaque couleur.
  • 'channels' : le nombre de canaux par pixel[6]

Elle va donc nous servir essentiellement à connaître les dimensions de l'image de base, mais aussi à en connaître le type. Le type est en effet important a connaître pour savoir quelle fonction utiliser pour créer la ressource de base.

on aura donc :

$base_info=getimagesize('tutophp_base.extension');
if($base_info[2]==1) {
$base=imagecreatefromgif('tutophp_base.extension');
} else if($base_info[2]==2) {
$base=imagecreatefromjpeg('tutophp_base.extension');
} else if($base_info[2]==3) {
$base=imagecreatefrompng('tutophp_base.extension');
} else {
return FALSE; }
$w_base = $base_info[0];
$h_base = $base_info[1];

Calcul des paramètres pour le copier/coller

Définir les dimensions maximale de la miniature
  • $w_mini : largeur maximale des miniatures
  • $h_mini : hauteur maximale des miniatures
$w_mini = 100;
$h_mini = 100;
Calculer la taille du support (= la taille de la miniature)

L'impératif de cette étape est déterminer les dimension de la miniature en sachant que :

  • le ratio largeur/hauteur doit être identique entre la base et la miniature
  • l'une des deux mesure sera égale à $w_mini ou à $h_mini et que l'autre lui sera inférieure

on trouve ainsi :

if( ($w_base/$h_base) >= ($w_mini/$h_mini) ) {
$w_support = $w_mini ;
$h_support = $w_mini*($h_base/$w_base);
}else{
$w_support = $h_mini*($w_base/$h_base);
$h_support = $h_mini ; }

Explication : si le ratio $w_base/$h_base est supérieur au ratio $w_mini/$h_mini cela signifie que :

  • la largeur de la miniature devra atteindre la limite de largeur définie
  • la hauteur sera calculée en conservant le ratio $w_base/$h_base pour éviter que l'image ne soit déformée
(et réciproquement)
Créer le support
$support = imagecreatetruecolor($w_support,$h_support);

support de la miniature

Compléter les paramètres manquants

Déterminer la zone à copier

En l'occurence, la il s'agit de l'image entière donc

$x_copie = 0 ;
$y_copie = 0 ;
$w_copie = $w_base ;
$h_copie = $h_base ;
Déterminer la zone où coller
$x_colle = 0 ;
$y_colle = 0 ;
$w_colle = $w_support ;
$h_colle = $h_support ;

Copier/coller

imagecopyresampled(
$support,$base,
$x_colle,$y_colle,$x_copie,$y_copie,
$w_colle,$h_colle,$w_copie,$h_copie
);

Exporter l'image

imagejpeg($support,'totuphp_resultat',100);

miniature

Fonction utilisée pour mon site

function thb_gen($Source,$Destination)
{
$src_info=getimagesize($Source);
if($src_info[2]==1) {$src=imagecreatefromgif($Source);}
else if($src_info[2]==2) {$src=imagecreatefromjpeg($Source);}
else if($src_info[2]==3) {$src=imagecreatefrompng($Source);}
else {return FALSE;}

$dst_w = ($src_info[0]/$src_info[1] >= THB_W/THB_H) ? THB_W : (THB_H*$src_info[0])/$src_info[1];
$dst_h = ($src_info[0]/$src_info[1] <= THB_W/THB_H) ? THB_H : (THB_W*$src_info[1])/$src_info[0] ;
$dst_x = (THB_W - $dst_w)/2 ;
$dst_y = (THB_H - $dst_h)/2 ;


$dst=imagecreatetruecolor(THB_W,THB_H);
imagecopyresampled($dst, $src, $dst_x, $dst_y, 0, 0, $dst_w, $dst_h , $src_info[0], $src_info[1]);
@unlink($Destination);
imagejpeg($dst, $Destination, 100);
}
?>

Explication

Les constantes

THB_W et THB_H sont les constantes définies dans mon fichier de configuration et correspondent à la taille des miniatures

Le calcul des paramètres

Comme vous pouvez le constater, toutes mes miniatures ont la même tailles. Des bandes noirs sont rajoutées en compensations pour éviter de déformer les images une fois miniaturisées et correspondent en fait à la couleur de fond du support.

En fait, au lieu de calculer les valeur de largeur et de hauteur pour le support, je les calculs pour la zone de collage sur le support ($dst_w et $dst_h). Puis je calcul la distance au support ($dst_x et dst_y) pour centrer la zone de collage dans le support.



Notes

[1] si cette fonction n'est pas disponible, on peut utiliser imagecreate() mais le résultat sera moins bon

[2] ces fonctions ne s'utilisent respectivement qu'avec des images jpeg, png et gif. Il n'y a rien pour les bitmap il me semble, mais de toute façon, le bitmap n'est pas un format compressé, et sur le net il faut compresser au mieux les images :) ...

[3] si cette fonction n'est pas disponible, on peut utiliser imagecopyresized() mais le résultat sera moins bon

[4] le troisième paramètre est optionnel et définit la qualité de l'exportation. Il prend des valeurs entières de 0 (pire qualité, petitfichier) à 100 (meilleure qualité, gros fichier). Par défaut, la valeurest celle de la qualité IJG (75). Ce paramètre n'existe pas pour imagepng et imagegif

[5] 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 =TIFF (Ordredes octets Intel), 8 = TIFF (Ordre des octets Motorola), 9 =JPC, 10 =JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF

[6] égal à 3 pour RGB et 4 pour CMYB

21 octobre 2005 03:01:37 :
Erreurs de copier/coller et quelques fautes d'orthographes corrigées
21 octobre 2005 12:07:40 :
J'ai essayé de corriger des problèmes d'espace manquant entre les mots, et j'ai aussi corrigé/amélioré quelques petits détails (parce que la perfection n'est pas de ce monde ;) )
08 novembre 2005 01:04:02 :
Nettoyage du code d'après les remarques de coucou747
signaler à un administrateur
Commentaire de malalam le 21/10/2005 11:21:35 administrateur CS

Hello,

j'aime les tuto.
Quand en plus ils sont particulièrement bien faits...je suis aux anges!

Ca vaut 10 pour moi.

Merci mr monoceros :-)

signaler à un administrateur
Commentaire de monoceros01 le 21/10/2005 11:56:16

Merci =) par contre si tu regarde bien, y manque pas mal d'espaces entre les mots que j'ai essayé de rajouter dans la dernière mise à jour, mais ça a pas marché o_o...
Sinon pour info, c'est un tuto que j'ai fait sur mon site perso et que j'ai copier/coller ici =) (avec quelques améliorations)

signaler à un administrateur
Commentaire de malalam le 21/10/2005 12:28:47 administrateur CS

Les espaces, c'est un petit bug qui traine en effet, ça dure depuis quelques temps.
Je ne peux rien faire sur le contenu, désolé.

signaler à un administrateur
Commentaire de monoceros01 le 21/10/2005 12:32:57

Pas grave tant que ça reste lisible =)

signaler à un administrateur
Commentaire de malalam le 21/10/2005 12:40:45 administrateur CS

cs est en constante évolution, donc ce bug finira par passer à la trappe :-)
Bon je ne suis pas encore calé sur l'architecture de CS :-) mais quand un truc ne marche pas ici, essaye en changeant de navigateur (typiquement, si tu utilises firefox, passe à IE, ça marche parfois mieux. Si tu es sous Linux...ben...essaye quand même avec un autre navigateur).

signaler à un administrateur
Commentaire de monoceros01 le 21/10/2005 12:42:18

Ah ok, j'essayerai sur IE ;)... plus tard :p

signaler à un administrateur
Commentaire de wizard512 le 24/10/2005 10:33:33

10/10 super ce tuto vraiment génial.

signaler à un administrateur
Commentaire de coucou747 le 07/11/2005 20:57:51

Salut, je vennais pour voir si tu parlais un peu d'imagemagic, mais aparement non... Domage, peut-être pour une prochaine mise à jour (C'est vrai que l'on est obligé d'utiliser system, mais ça peut rendre des effets que gd ne permet pas de faire...)

Bon, j'ai remarqué que ce tuto était particulièrement bien fait, je ne note pas pour le moment, je juge, je noterais ensuite car j'ai remarqué un mélange de doubles et de simples quotes, et j'aimes pas ça, c'est pas rigoureux, de plus, les simples sont plus rapides que les doubles (et pour les opérations sur les images, ça a une grande importance...) j'attends une mise à jour...

signaler à un administrateur
Commentaire de monoceros01 le 08/11/2005 01:12:38

En ce qui concerne les quotes, je vais faire ça de ce pas, je n'ai en effet pas été très rigoureux de ce côté là.

En revanche, en ce qui concerne imagemagick, je pense que cela n'a pas sa place dans ce tutorial. Pour trois raisons :
- GD est plus souvent retrouvé ches les hébergeurs que imagemagick (et à moins d'être son propre hébergeur...)
- Ce tutorial se place comme une introduction/initiation à l'utilisation de la librairie GD
- Le thème principal est la création de miniature, donc je trouve inutile voir délétère de parler des autres possibilités voir "des effets que gd ne permet pas de faire".

signaler à un administrateur
Commentaire de coucou747 le 08/11/2005 17:48:56

Quand tu fais une miniature, c'est souvent pour un forum ou une galerie, et proposer une page qui permetrais de remetre en place ses images serait plutot sympa non ? (genre régler le constraste, faire des flous, retourner la photo, ajouter des copyright), ça doit pouvoir être super efficace sur un gestionnaire de blog, mais sans image magic, tu ne feras pas tout ce que tu veux... Tu peux ajouter des copyright avec GD, mais pas régler le contraste...
Enfin bon, c'est un élargissement possible, juste une piste de réflexion de plus...

signaler à un administrateur
Commentaire de monoceros01 le 08/11/2005 18:21:25

J'avoue ne pas utiliser imagemagick et c'est la raison principale pour laquelle je n'en ai pas parlé (en fait avant que tu n'en parles je ne connaissais pas du tout).

Mais je pense que "proposer une page qui permetrait de remettre en place ses images" réside plus de l'application de mon tutorial à quelque chose de concrêt et donc n'aurais pas sa place dans "Tutorial" mais plutôt dans "Code Sources". L'exemple de la fonction que j'utilise pour mon site est, selon moi, suffisant pour illustrer mon tutorial.

J'ai réellement voulu rester dans le cadre restreint du redimensionnement d'images dans un souci de clarté. Pour moi un bon tutorial, est un tutorial court, ciblé, et didactique. S'il fallait que je liste toutes les possibilités de GD + imagemagic + leurs application pratiques pour forum et galerie, mon tutorial serait multiplié par 10, serait plus proche d'une documentation que d'un enseignement, et la clarté serait fortement diminuée.
Maîtriser le concept simple de redimensionnement d'images permettra ensuite à ceux qui sont intéressés de pousser plus loin leur maîtrise de GD en autodidacte, voir de s'essayer à image magick (faudra que j'essaye d'ailleurs).

"Enfin bon, c'est un élargissement possible, juste une piste de réflexion de plus..." je dirais plutôt le sujet d'un autre tutorial dans la même catégorie (peut-être que je m'y mettrais quand j'aurais pris plus connaissance avec image magick, mais il aura une utilité plus limité car peu d'hébergements le mette à disposition)

signaler à un administrateur
Commentaire de tynmar le 28/02/2006 16:52:23

C'est bien expliqué. ! Par contre, juste un point qui ne dépend que de moi, j'ai l'impression de lire quelquechose comme sur ce site http://list.mail.ru/index.html
Vous comprenez qqch ? Entre voir ce qui est écrit, on peut comprendre, et s'en servir comme un grand après, il y a un fossé, et j'ai du mal là.
(je tiens à insister sur le fait que ça dépend de moi, je suis un peu nul et vraiment con)

signaler à un administrateur
Commentaire de malalam le 28/02/2006 17:06:23 administrateur CS

Lol...meuh non.
Tu veux un conseil ?
vas-y doucement.
Prends la doc sur GD (php.net), et commence par le début (imagecreate()), copie le 1er exemple sur ton pc, lance le...
Puis vas voir une autre fonction, ajoute-la au code...et ainsi de suite.
Bref, familiarise toi avec GD.
TU verras, ce n'est pas SI compliqué que ça en fait. Mais faut se plonger dedans... :-)

signaler à un administrateur
Commentaire de monoceros01 le 28/02/2006 21:43:57

Tynmar... Si tu avais lu la partie française de mon tuto, et non celle directement en... Russe, tu aurais vu écrit "ce tutorial s'adresse à des personnes ayant déjà certaines bases en php" ce qui n'est visiblement pas encore ton cas (si on se fie à tes posts sur le forum).
Donc, je te conseille de réellement apprendre le php avant de te lancer dans la compréhension de ses librairies (d'ailleurs sais-tu vraiment ce qu'est une librairie?).
Une fois que tu auras des bases en programmation et quelques notions de php, tu pourras relire ce tuto avec un regard nouveau, et je suis sûr que le Russe te semblera plus clair.

Je vais même être sympa et t'indiquer quelques adresses utiles :
- easyphp pour installer un serveur fonctionnel en quelques clics qui te permettra de faire tourner tes scripts sur ton ordinateur => http://www.easyphp.org/
- la documentation indispensable même pour les plus aguérris http://www.php.net/manual/fr/ (je te conseille de regarder d'abord dans "référence du langage"
- un tuto... la je te laisse le soin d'écumer le net. Je conseillais le site du zéro avant, mais j'avais jamais vu le nombre de bêtises qu'ils disaient. Néanmoins, ça peut aider à acquérir des bases. Personnellement, j'ai plutôt passé mon temps a décrypté les scripts de certains CMS... (Chacun son truc)

signaler à un administrateur
Commentaire de coucou747 le 02/03/2006 11:32:31

(d'ailleurs sais-tu vraiment ce qu'est une librairie?) => euh... un fichier .so ou .dll, qui fut composé à une époque de fichiers .h ou .hpp, .c ou .cpp, d'un makefile et d'un configure.sh... Petite précision, le fichier .c ou .cpp n'avait pas de fonction main();

les pugins ont la même organisation au niveau des sources, ils ont beaucoup de points communs...

signaler à un administrateur
Commentaire de nicordi le 10/03/2006 17:28:12

Salut à tous
Je trouve le tuto Super Genial.

Cependant soit j'ai mal lu, soit je suis fou mais j'ai encore une petite question.

Est que quand on créé la miniature cela reduit egalement le poiods de l'image. Autrement en creant la miniature d'une image est ce la page s'ouvrira plus vite.

Merci de vos reponse

signaler à un administrateur
Commentaire de monoceros01 le 10/03/2006 21:08:57

Hum, le php va réellement générer une image plus petite, donc oui, le poid de l'image sera plus petit =)

En revanche, en se qui concerne le temps de chargement de la page, si on prend en compte sa génération via php et son téléchargement par le navigateur internet, ça dépend :)

Oui car générer des thumbnails, ça prend un tout petit peu de temps. Donc l'idéal, c'est de ne pas devoir générer une centaine de thumbnails en même temps, mais de les garder en cache (dans un dossier "thumbnails" par exemple). Et là, effectivement, le temps de chargement sera plus court qu'en utilisant un redimensionnement par les attributs width et height de l'élément IMG (en XHTML)... (en plus c'est plutôt moche v__v)

signaler à un administrateur
Commentaire de coucou747 le 11/03/2006 08:47:26

pour modifier le poid :
imagejpeg($dst, $Destination, 100);
c'est le 100 qu'on doit modifier : on doit mettre un chiffre plus petit, 100 = qualité 100%...

Bon, sinon, t'as pas enlevé tes @...

Personellement, pour éviter d'avoir à connaitre le type d'une image, je fais :
$im=imageCreateFromString(file_get_contents(...)) or die(...);
comme ça, je peux ouvrir des images de tout les types, sans chercher à prévoir les types possibles...

signaler à un administrateur
Commentaire de monoceros01 le 11/03/2006 13:27:43

Pas mal pas mal coucou =)... ué je rajouterai un mot sur imageCreateFromString() quand j'aurais le temps (et le courage), et c'est vrai que j'ai pas parlé du troisième argument de imagejpeg()... mais bon là c'était pour généraliser avec imagegif() et imagepng() avec lesquels c'est pas possible... (je metterai pitète une tite parenthèse à ce sujet donc...)

signaler à un administrateur
Commentaire de 0ri0n le 19/03/2006 00:25:17

Super ton code, je l'ai un peu adapté à ma sauce (d'après ce que j'ai appris par ton tuto).

Je voulais que ma photo entiere soit redimentionnée (pas de partie ciblée), sans qu'on voit la trame noire

$redim_largeur est la valeur fixe (de 500) et $redim_hauteur est le résultat de ($redim_largeur * $hauteur_defaut)/$largeur_defaut

$miniature=imagecreatetruecolor($redim_largeur,$redim_hauteur);

doncle problème c'est que je me retrouve avec une vignette, qui fonctionne certes mais qui perd de sa qualité malgrès le fait de mettre 100 au jpg.

Je pense qu'il n'y a rien a faire ???

signaler à un administrateur
Commentaire de 0ri0n le 19/03/2006 03:34:45

C'est bon merci, j'ai corigé mon problème :).

Big up en tt cas

signaler à un administrateur
Commentaire de Mimata le 24/10/2006 21:37:47

Bonjour,

J'utilise ta fonction thb_gen mais je n'arrive pas à l'adapter afin de permettre de spécifier un fond autre que noir. Comment peut on faire pour que l'image "support" créée par imagecreatetruecolor soit d'une autre couleur que le noir par défaut ?

Merci

signaler à un administrateur
Commentaire de monoceros01 le 24/10/2006 21:56:45

En remplissant l'image crée par "imagecreatetruecolor()" par la couleur désirée avec "imagefill()", en faisant gaffe de créer la couleur utilisée avec "imagecolorallocate()". Et ensuite seulement tu copie/colle le la miniature redimensionnée dedans avec "imagecopyresampled()"

Je te renvois sur la documentation de php.net pour une utilisation plus précise de ces fonctions.

signaler à un administrateur
Commentaire de istu5 le 09/10/2007 20:12:06

Un peu trop de détail (inutiles) .

signaler à un administrateur
Commentaire de cacoun le 08/07/2008 11:40:54

Bonjour,

Y'a-t-il une taille maximale des fichiers Image sources, car kan j'utilse ses fonctions, il 'y a pas de redimensionnement possible, c'est à dire pas de copie sur mon serveur...

signaler à un administrateur
Commentaire de monoceros01 le 08/07/2008 11:54:19

Salut,
La mémoire vive allouée à l'exécution d'un script php est souvent limitée, donc si ton image est trop grande, elle demandera trop de ressource et le script sera interrompu.
La meilleure façon de savoir si ton script fonctionne ou pas, c'est d'essayer avec des images dont la taille est inférieur à 1Mo (là il ne devrait normalement pas y avoir de problème)
Sinon, tu peux vérifier si tu peux utiliser toutes les fonction avec un petit script du genre :
<?php
if ( function_exists('nom_de_ma_fonction') ) echo "existe" ;
else echo "existe pas" ;
?>
Si c'est ni un problème de taille ni un problème de fonction... Ben... On verrra :D

signaler à un administrateur
Commentaire de gmarcel le 10/09/2008 11:28:41

Bonjour,
En utilisant la fonction thb_gen($Source,$Destination), j'ai une erreur :
Parse error: parse error, unexpected '[' in C:\Program Files\EasyPHP 2.0b1\www\page.104.php on line 11
Contenu de cette ligne :
$dst_w = ($src_info[0]/$src_info[1] >= THB_W/THB_H) ? THB_W : (THB_H*src_info[0])/$src_info[1];
Je voudrais savoir a quoi correspond le coding du "point d'exclamatio" et des "deux points"
Merci d'avance pour votre aide
Bernard

signaler à un administrateur
Commentaire de malalam le 10/09/2008 19:03:47 administrateur CS

Hello,

c'est un opérateur ternaire :
$a = ($b === 1) ? 0 : 1;
est équivalent à
if($b === 1) {
  $a = 0;
} else {
  $a = 1;
}

Ton erreur ne vient pas de cette ligne à priori. Regarde un peu plus haut, ou un peu plus bas.

signaler à un administrateur
Commentaire de monoceros01 le 10/09/2008 21:18:39

Voilà, c'est comme y dit!

signaler à un administrateur
Commentaire de gmarcel le 12/09/2008 08:48:39

Bonjour,
Merci à MALALAM pour cette info
Je vais pouvoir continuer mon apprentissage
A+

signaler à un administrateur
Commentaire de isher le 03/02/2009 10:59:53

il y a t'il un moyen d'augmenter la mémoire vive allouée à l'exécution d'un script ?
mon script fonctionne parfaitement mais les images deviennent de plus en plus lourdes et mon script en refuse de plus en plus :/

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