Accueil > > > PHP - REDIMENSIONNER IMAGE + PICTO APRÈS UPLOAD
PHP - REDIMENSIONNER IMAGE + PICTO APRÈS UPLOAD
Information sur le tutoriel
Description
Quand on parle de "redimensionnement" d'image, il faut distinguer :
1- redimensionnement "à l'affichage" : ou comment afficher ses images à la taille d'affichage voulue ? l'image elle-même n'est pas modifiée, seules ses dimensions d'affichage sont "recalculées". - fonction fct_affich_image.php : redimensionner des images à l'affichage
2- redimensionnement "physique" : modification du "poids" de l'image (nouvelle image aux dimensions spécifiées), - fonction fct_redim_image.php : L'image finale est redimensionnée "en proportions". - fonction fct_crop_image.php : L'image finale est "coupée" ("crop centré"). - avec base de données : upload, traitement, enregistrement. - dans un dossier (répertoire) : redimensionner des images déjà présentes.
Tutorial
Mon tutorial original se trouve a l'adresse : http://www.asp-php.net/tutorial/asp-php/php-redim-image-upload.php 1- Redimensionnement "à l'affichage" | La fonction | fct_affich_image($Wmax, $Hmax, $img_Src) | | Les paramètres : - $Wmax : LARGEUR maxi d'affichage ----> ou 0 : largeur libre - $Hmax : HAUTEUR maxi d'affichage ----> ou 0 : hauteur libre - $img_Src : NOM de l'image Source (+ chemin)
L'image source n'est pas modifiée, seules ses dimensions d'affichage sont "recalculées". | | fct_affich_image.php | | <?php // --------------------------------------------------------------------------------------------------------------------- // fonction de redimensionnement A L'AFFICHAGE // --------------------------------------------------------------------------------------------------------------------- // La FONCTION : fct_affich_image($Wmax, $Hmax, $img_Src) // Les parametres : // - $Wmax : LARGEUR maxi finale ----> ou 0 : largeur libre // - $Hmax : HAUTEUR maxi finale ----> ou 0 : hauteur libre // - $img_Src : NOM de l image Source // --------------------------------------------------------------------------------------------------------------------- // UTILISATION (exemple) : // <img src="repimg/monimage.jpg" <?php fct_affich_image(100, 100, 'repimg/monimage.jpg') ?>> // --------------------------------------------------------------------------------------------------------------------- function fct_affich_image($Wmax, $Hmax, $img_Src) { // ------------------------------------------------------------------ // Lit les dimensions de l'image $sizeimg = GetImageSize($img_Src); $Src_W = $sizeimg[0]; // largeur $Src_H = $sizeimg[1]; // hauteur // ------------------------------------------------------------------ // Teste les dimensions tenant dans la zone $test_H = round(($Wmax / $Src_W) * $Src_H); $test_W = round(($Hmax / $Src_H) * $Src_W); // ------------------------------------------------------------------ // Si Height final non précisé (0) if(!$Hmax) $Hmax = $test_H; // Sinon si Width final non précisé (0) elseif(!$Wmax) $Wmax = $test_W; // Sinon teste quel redimensionnement tient dans la zone elseif($test_H>$Hmax) $Wmax = $test_W; else $Hmax = $test_H; // ------------------------------------------------------------------ // (procedure : ne retourne aucune valeur mais ...) // AFFICHE les dimensions optimales echo 'width='.$Wmax.' height='.$Hmax; } // --------------------------------------------------------------------------------------------------------------------- ?> | | | 2- Redimensionnement "physique proportionnel" | La fonction | fct_redim_image($Wmax, $Hmax, $rep_Dst, $img_Dst, $rep_Src, $img_Src) | | Redimensionnement "physique "en proportions" (conserve les proportions de l'image) 3 options A- "normal" : image finale à HAUTEUR ET LARGEUR maxi fixes. B- "hauteur" : image finale à HAUTEUR maxi fixe (largeur libre) C- "largeur" : image finale à LARGEUR maxi fixe (hauteur libre)
Retourne la valeur : - 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, - sinon rien (false)
Les paramètres : - $Wmax : LARGEUR maxi finale --> ou 0 : largeur libre - $Hmax : HAUTEUR maxi finale --> ou 0 : hauteur libre - $rep_Dst : répertoire de l'image de destination (déprotégé) --> ou '' : même répertoire NB il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod ou via logiciel FTP) - $img_Dst : NOM de l'image de destination --> ou '' : même nom - $rep_Src : répertoire de l'image source (déprotégé) - $img_Src : NOM de l'image source
Les 3 options A- $Wmax != 0 et $Hmax != 0 -> à LARGEUR maxi ET HAUTEUR maxi fixes B- si $Wmax = 0 -> à LARGEUR maxi fixe C- si $Hmax = 0 -> à HAUTEUR maxi fixe NB - si $rep_Dst = '' -> $rep_Dst=$rep_Src (même répertoire) - si $img_Dst = '' -> $img_Dst=$img_Src (même nom) - si $rep_Dst='' ET $img_Dst='' -> on écrase (remplace) l'image source ! - $img_Dst et $img_Src doivent avoir la même extension (même type mime) !
Extensions acceptées (traitées ici) : .jpg , .jpeg , .png Pour ajouter d'autres extensions : voir la bibliothèque GD ou ImageMagick | | fct_redim_image.php | | <?php // --------------------------------------------------------------------------------------------------------------------- // fonction de REDIMENSIONNEMENT physique "proportionnel" et ENREGISTREMENT // --------------------------------------------------------------------------------------------------------------------- // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false) // --------------------------------------------------------------------------------------------------------------------- // La FONCTION : fct_redim_image($Wmax, $Hmax, $rep_Dst, $img_Dst, $rep_Src, $img_Src) // Les parametres : // - $Wmax : LARGEUR maxi finale ----> ou 0 : largeur libre // - $Hmax : HAUTEUR maxi finale ----> ou 0 : hauteur libre // - $rep_Dst : repertoire de l image de Destination (deprotégé) ----> ou '' : meme repertoire // il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod ou via logiciel FTP) // - $img_Dst : NOM de l image de Destination ----> ou '' : meme nom que l image Src // - $rep_Src : repertoire de l image Source (deprotégé) // - $img_Src : NOM de l image Source // --------------------------------------------------------------------------------------------------------------------- // si $rep_Dst = '' : $rep_Dst=$rep_Src (meme repertoire) // si $img_Dst = '' : $img_Dst=$img_Src (meme nom) // Attention : si $rep_Dst='' ET $img_Dst='' : on ecrase (remplace) l image source ($img_Src) ! // NB : $img_Dst et $img_Src doivent avoir la meme extension (meme type mime) ! // --------------------------------------------------------------------------------------------------------------------- // 3 options : // A- $Wmax != 0 et $Hmax != 0 : a LARGEUR maxi ET HAUTEUR maxi fixes // B- si $Wmax = 0 : image finale a LARGEUR maxi fixe (hauteur libre) // C- si $Hmax = 0 : image finale a HAUTEUR maxi fixe (largeur libre) // --------------------------------------------------------------------------------------------------------------------- // Extensions acceptees (traitees ici) : .jpg , .jpeg , .png // Pour ajouter d autres extensions : voir la bibliotheque GD ou ImageMagick // (GD) NE FONCTIONNE PAS avec les GIF ANIMES ou a fond transparent ! // --------------------------------------------------------------------------------------------------------------------- // UTILISATION (exemple) : // $redimOK = fct_redim_image(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg'); // if ($redimOK == 1) { echo 'Redimensionnement OK !'; } // --------------------------------------------------------------------------------------------------------------------- function fct_redim_image($Wmax, $Hmax, $rep_Dst, $img_Dst, $rep_Src, $img_Src) { // ------------------------------------------------------------------ $condition = 0; // Si certains parametres ont pour valeur '' : if ($rep_Dst == '') { $rep_Dst = $rep_Src; } // (meme repertoire) if ($img_Dst == '') { $img_Dst = $img_Src; } // (meme nom) if ($Wmax == '') { $Wmax = 0; } if ($Hmax == '') { $Hmax = 0; } // ------------------------------------------------------------------ // si le fichier existe dans le répertoire, on continue... if (file_exists($rep_Src.$img_Src) && ($Wmax!=0 || $Hmax!=0)) { // ---------------------------------------------------------------- // extensions acceptees : $ExtfichierOK = '" jpg jpeg png"'; // (l espace avant jpg est important) // extension $tabimage = explode('.',$img_Src); $extension = $tabimage[sizeof($tabimage)-1]; // dernier element $extension = strtolower($extension); // on met en minuscule // ---------------------------------------------------------------- // extension OK ? on continue ... if (strpos($ExtfichierOK,$extension) != '') { // ------------------------------------------------------------- // recuperation des dimensions de l image Src $size = getimagesize($rep_Src.$img_Src); $W_Src = $size[0]; // largeur $H_Src = $size[1]; // hauteur // ------------------------------------------------------------- // condition de redimensionnement et dimensions de l image finale // ------------------------------------------------------------- // A- LARGEUR ET HAUTEUR maxi fixes if ($Wmax != 0 && $Hmax != 0) { $ratiox = $W_Src / $Wmax; // ratio en largeur $ratioy = $H_Src / $Hmax; // ratio en hauteur $ratio = max($ratiox,$ratioy); // le plus grand $W = $W_Src/$ratio; $H = $H_Src/$ratio; $condition = ($W_Src>$W) || ($W_Src>$H); // 1 si vrai (true) } // ------------------------------------------------------------- // B- LARGEUR maxi fixe if ($Hmax != 0 && $Wmax == 0) { $H = $Hmax; $W = $H * ($W_Src / $H_Src); $condition = $H_Src > $Hmax; // 1 si vrai (true) } // ------------------------------------------------------------- // C- HAUTEUR maxi fixe if ($Wmax != 0 && $Hmax == 0) { $W = $Wmax; $H = $W * ($H_Src / $W_Src); $condition = $W_Src > $Wmax; // 1 si vrai (true) } // ------------------------------------------------------------- // on REDIMENSIONNE si la condition est vraie // ------------------------------------------------------------- if ($condition == 1) { // creation de la ressource-image"Src" en fonction de l extension // et on cree une ressource-image"Dst" vide aux dimensions finales switch($extension) { case 'jpg': case 'jpeg': $Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src); $Ress_Dst = ImageCreateTrueColor($W,$H); break; case 'png': $Ress_Src = imagecreatefrompng($rep_Src.$img_Src); $Ress_Dst = ImageCreateTrueColor($W,$H); // fond transparent (pour les png avec transparence) imagesavealpha($Ress_Dst, true); $trans_color = imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127); imagefill($Ress_Dst, 0, 0, $trans_color); break; } // ---------------------------------------------------------- // REDIMENSIONNEMENT (copie, redimensionne, re-echantillonne) ImageCopyResampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src); // ---------------------------------------------------------- // ENREGISTREMENT dans le repertoire (avec la fonction appropriee) switch ($extension) { case 'jpg': case 'jpeg': ImageJpeg ($Ress_Dst, $rep_Dst.$img_Dst); break; case 'png': imagepng ($Ress_Dst, $rep_Dst.$img_Dst); break; } // ---------------------------------------------------------- // liberation des ressources-image imagedestroy ($Ress_Src); imagedestroy ($Ress_Dst); } // ------------------------------------------------------------- } } // --------------------------------------------------------------------------------------------------------------------- // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false) // si le fichier a bien ete cree if ($condition == 1 && file_exists($rep_Dst.$img_Dst)) { return true; } else { return false; } } // --------------------------------------------------------------------------------------------------------------------- ?> | | | 3- Redimensionnement "physique crop centré" | fct_crop_image($Wfin, $Hfin, $rep_Dst, $img_Dst, $rep_Src, $img_Src) | | Redimensionnement "physique "crop centré" (l'image est "coupée" aux dimensions voulues) 4 options A- "normal" : crop "centré" aux dimensions indiquées B- "hauteur" : crop "centré" de la hauteur indiquée (même largeur que la source) C- "largeur" : crop "centré" de la largeur indiquée (même hauteur que la source) D- "cas spécial" : crop "carré" à la plus petite dimension de l'image source
Retourne la valeur : - 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, - sinon rien (false)
Les paramètres : - $Wfin : LARGEUR finale ----> ou 0 - $Hfin : HAUTEUR finale ----> ou 0 - $rep_Dst : répertoire de l'image de destination (déprotégé) ----> ou '' (même répertoire) NB il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod ou via logiciel FTP) - $img_Dst : NOM de l'image de destination ----> ou '' (même nom) - $rep_Src : répertoire de l'image source (déprotégé) - $img_Src : NOM de l'image source
Les 4 options A- si $Wfin != 0 et $Hfin!= 0 : crop aux dimensions indiquées B- si $Wfin = 0 et $Hfin != 0 : crop en HAUTEUR (même largeur que la source) C- si $Wfin != 0 et $Hfin = 0 : crop en LARGEUR (même hauteur que la source) D- si $Wfin= 0 et $Hfin = 0 : (cas spécial) crop "carré" à la plus petite dimension de l'image source
NB - si $rep_Dst = '' -> $rep_Dst = $rep_Src (même répertoire) - si $img_Dst = '' -> $img_Dst = $img_Src (même nom) - si $rep_Dst='' ET $img_Dst='' -> on écrase (remplace) l'image source !
Extensions - acceptées (traitées ici) : .jpg , .jpeg , .png - $img_Dst et $img_Src doivent avoir la même extension (même type mime) ! Pour ajouter d'autres extensions : voir la bibliothèque GD ou ImageMagick ASTUCE : picto carré (de 100 x 100 pixels) --> Crop "carré", puis "proportionnel" $redim = fct_crop_image(0,0,$repDest,$imageDest,$repSource,$imageSource); $redim = fct_redim_image(100,0,'','',$repDest,$imageDest); if ($redim==true) { echo 'picto carré créé !'; } | fct_crop_image.php | <?php // --------------------------------------------------------------------------------------------------------------------- // fonction de REDIMENSIONNEMENT physique "CROP CENTRE" et Enregistrement // --------------------------------------------------------------------------------------------------------------------- // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false) // --------------------------------------------------------------------------------------------------------------------- // La FONCTION : fct_crop_image($Wfin, $Hfin, $rep_Dst, $img_Dst, $rep_Src, $img_Src) // Les parametres : // - $Wfin : LARGEUR finale --> ou 0 // - $Hfin : HAUTEUR finale --> ou 0 // - $rep_Dst : repertoire de l image de Destination (deprotégé) --> ou '' // il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod ou via logiciel FTP) // - $img_Dst : NOM de l image de Destination ----> ou '' // - $rep_Src : repertoire de l image Source (deprotégé) // - $img_Src : NOM de l image Source // --------------------------------------------------------------------------------------------------------------------- // 4 options : // A- si $Wfin != 0 et $Hfin != 0 : crop aux dimensions indiquees // B- si $Wfin = 0 et $Hfin != 0 : crop en HAUTEUR (meme largeur que la source) // C- si $Wfin != 0 et $Hfin = 0 : crop en LARGEUR (meme hauteur que la source) // D- si $Wfin = 0 et $Hfin = 0 : (cas special) crop "carre" a la plus petite dimension de l image source // --------------------------------------------------------------------------------------------------------------------- // - si $rep_Dst = '' : $rep_Dst=$rep_Src (meme repertoire que le repertoire Source) // - si $img_Dst = '' : $img_Dst=$img_Src (meme nom que l image Source) // - si $rep_Dst='' ET $img_Dst='' : on ecrase (remplace) l image source ($img_Src) ! // --------------------------------------------------------------------------------------------------------------------- // NB : $img_Dst et $img_Src doivent avoir la meme extension (meme type mime) ! // Extensions acceptees (traitees ici) : .jpg , .jpeg , .png // Pour ajouter d autres extensions : voir la bibliotheque GD ou ImageMagick // (GD) NE FONCTIONNE PAS avec les GIF ANIMES ou a fond transparent ! // --------------------------------------------------------------------------------------------------------------------- // UTILISATION (exemple) : // $cropOK = fct_crop_image(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg'); // if ($cropOK == 1) { echo 'Crop centré OK !'; } // --------------------------------------------------------------------------------------------------------------------- function fct_crop_image($Wfin, $Hfin, $rep_Dst, $img_Dst, $rep_Src, $img_Src) { // ------------------------------------------------------------------ $condition = 0; // Si certains parametres ont pour valeur '' : if ($rep_Dst == '') { $rep_Dst = $rep_Src; } // (meme repertoire) if ($img_Dst == '') { $img_Dst = $img_Src; } // (meme nom) if ($Wfin == '') { $Wfin = 0; } if ($Hfin == '') { $Hfin = 0; } // ------------------------------------------------------------------ // si le fichier existe dans le répertoire, on continue... if (file_exists($rep_Src.$img_Src)) { // ---------------------------------------------------------------- // extensions acceptees : $ExtfichierOK = '" jpg jpeg png"'; // (l espace avant jpg est important) // extension fichier Source $tabimage = explode('.',$img_Src); $extension = $tabimage[sizeof($tabimage)-1]; // dernier element $extension = strtolower($extension); // on met en minuscule // ---------------------------------------------------------------- // extension OK ? on continue ... if (strpos($ExtfichierOK,$extension) != '') { // ------------------------------------------------------------- $condition = 1; // ------------------------------------------------------------- // recuperation des dimensions de l image Source $size = getimagesize($rep_Src.$img_Src); $W_Src = $size[0]; // largeur $H_Src = $size[1]; // hauteur // ------------------------------------------------------------- // condition de crop et dimensions de l image finale // ------------------------------------------------------------- // A- crop aux dimensions indiquees if ($Wfin != 0 && $Hfin != 0) { $W = $Wfin; $H = $Hfin; } // ------------------------------------------------------------- // B- crop en HAUTEUR (meme largeur que la source) if ($Wfin == 0 && $Hfin != 0) { $H = $Hfin; $W = $W_Src; } // ------------------------------------------------------------- // C- crop en LARGEUR (meme hauteur que la source) if ($Wfin != 0 && $Hfin == 0) { $W = $Wfin; $H = $H_Src; } // D- (cas special) crop "carre" a la plus petite dimension de l image source if ($Wfin == 0 && $Hfin == 0) { if ($W_Src >= $H_Src) { $W = $H_Src; $H = $H_Src; } else { $W = $W_Src; $H = $W_Src; } } // ------------------------------------------------------------- // creation de la ressource-image"Src" en fonction de l extension switch($extension) { case 'jpg': case 'jpeg': $Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src); break; case 'png': $Ress_Src = imagecreatefrompng($rep_Src.$img_Src); break; } // ---------------------------------------------------------- // creation d une ressource-image"Dst" aux dimensions finales // fond noir (par defaut) switch($extension) { case 'jpg': case 'jpeg': $Ress_Dst = ImageCreateTrueColor($W,$H); // fond blanc $blanc = imagecolorallocate ($Ress_Dst, 255, 255, 255); imagefill ($Ress_Dst, 0, 0, $blanc); break; case 'png': $Ress_Dst = ImageCreateTrueColor($W,$H); // fond transparent (pour les png avec transparence) imagesavealpha($Ress_Dst, true); $trans_color = imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127); imagefill($Ress_Dst, 0, 0, $trans_color); break; } // ------------------------------------------------------------- // CENTRAGE du crop // coordonnees du point d origine Scr : $X_Src, $Y_Src // coordonnees du point d origine Dst : $X_Dst, $Y_Dst // dimensions de la portion copiee : $W_copy, $H_copy // ------------------------------------------------------------- // CENTRAGE en largeur if ($Wfin == 0) { if ($Hfin == 0 && $W_Src<$H_Src) { $X_Src = 0; $X_Dst = 0; $W_copy = $W_Src; } else { $X_Src = 0; $X_Dst = ($W - $W_Src) /2; $W_copy = $W_Src; } } else { if ($W_Src > $W) { $X_Src = ($W_Src - $W) /2; $X_Dst = 0; $W_copy = $W; } else { $X_Src = 0; $X_Dst = ($W - $W_Src) /2; $W_copy = $W_Src; } } // ------------------------------------------------------------- // CENTRAGE en hauteur if ($Hfin == 0) { if ($Wfin == 0 && $H_Src<$W_Src) { $Y_Src = 0; $Y_Dst = 0; $H_copy = $H_Src; } else { $Y_Src = 0; $Y_Dst = ($H - $H_Src) /2; $H_copy = $H_Src; } } else { if ($H_Src > $H) { $Y_Src = ($H_Src - $H) /2; $Y_Dst = 0; $H_copy = $H; } else { $Y_Src = 0; $Y_Dst = ($H - $H_Src) /2; $H_copy = $H_Src; } } // ------------------------------------------------------------- // CROP par copie de la portion d image selectionnee imagecopyresampled ($Ress_Dst, $Ress_Src, $X_Dst, $Y_Dst, $X_Src, $Y_Src, $W_copy, $H_copy, $W_copy, $H_copy); // ---------------------------------------------------------- // ENREGISTREMENT dans le repertoire (avec la fonction appropriee) switch ($extension) { case 'jpg': case 'jpeg': ImageJpeg ($Ress_Dst, $rep_Dst.$img_Dst); break; case 'png': imagepng ($Ress_Dst, $rep_Dst.$img_Dst); break; } // ---------------------------------------------------------- // liberation des ressources-image imagedestroy ($Ress_Src); imagedestroy ($Ress_Dst); } // ------------------------------------------------------------- } // --------------------------------------------------------------------------------------------------------------------- // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false) // si le fichier a bien ete cree if ($condition == 1 && file_exists($rep_Dst.$img_Dst)) { return true; } else { return false; } } // --------------------------------------------------------------------------------------------------------------------- ?> | | | 4- Utilisation avec base de données | But : Uploader des images sans se soucier de leur "poids", puisqu'on va les redimensionner pour s'adapter aux dimensions d'affichage final sur notre site (et créer des pictos a la volée). En effet, les visiteurs peuvent très bien charger des images "haute résolution", très gourmandes en "temps de chargement" et en espace disque. - adapter après "upload" la taille des images à nos besoins (si nécessaire) (gain de temps de chargement et d'espace disque). - créer des images de prévisualisation (pictos) à la volée.
3 étapes : 1- Liste : liste des images présentes + options AJOUTER - MODIFIER - SUPPRIMER 2- Formulaire : affichage du formulaire (en fonction de l'option choisie) 3- Traitement : (faisant appel aux fonctions de redimensionnement "physique") - gestion des erreurs, (options AJOUTER - MODIFIER) : - vérification des dimensions de l'image "uploadée", et redimensionnement automatique, - création automatique d'un picto, - enregistrement des photo et picto dans un dossier (répertoire avec "droits en écriture"), - enregistrement de leurs noms (et d'un commentaire) dans la table (base de données). (option SUPPRIMER) : - suppression de la fiche dans la table, - suppression des photo et picto concernées dans le dossier.
On a donc besoin :
1- d'une base de données MySQL (MABASE), dans laquelle est créée une table (MATABLE) contenant au moins les champs suivants : - NUM (INT - 11 - auto-incrementé : clé primaire - NotNull) - COMMENT1 (VARCHAR - 255 - Null) - PHOTO1 (VARCHAR - 255 - Null) - PICTO1 (VARCHAR - 255 - Null)
2- d'un dossier déprotégé (repIMAGES) (avec "droits en écriture").
3- des fichiers : - _connexion.php contient les paramètres de connexion à votre base - MONFICHIER_LISTE.php - MONFICHIER_FORM.php - MONFICHIER_TRAITER.php (Fonctions de redimensionnement) - fct_affich_image.php - fct_redim_image.php - fct_crop_image.php | | _connexion.php | | <?php // Paramètres persos $host = "localhost"; // voir hébergeur $user = "login"; // identifiant de votre BD (vide ou "root" en local) $pass = "password"; // mot de passe de votre BD (vide en local) $bdd = "MABASE"; // nom de la BD // connexion @mysql_connect($host,$user,$pass) or die("Impossible de se connecter"); @mysql_select_db("$bdd") or die("Impossible de se connecter"); ?> | | | Création de la table MATABLE Via PhpMyAdmin, ou requête SQL : | CREATE TABLE `MATABLE` ( `NUM` INT( 11 ) NOT NULL AUTO_INCREMENT , `COMMENT1` VARCHAR( 255 ) , `PHOTO1` VARCHAR( 255 ) , `PICTO1` VARCHAR( 255 ) , PRIMARY KEY ( `NUM` ) ) TYPE = MYISAM ; | | | MONFICHIER_LISTE.php | dans cet exemple : - affichage en ligne les pictos des photos présentes dans la table de la base de données, - avec pour chacune des boutons "Modifier" et "Supprimer" - et un bouton "Ajouter Nouveau" | | | | <?php // connexion a la base de donnees include("_connexion.php"); // FONCTION de redimensionnement "a l affichage" include("fct_affich_image.php"); // --------------------------------------------------------------------------------------------------------------------- // La base de donnees (MABASE) avec une table (MATABLE) // La table doit contenir (au moins) les champs suivants : // - NUM (INT - 11 - auto-incremente - NotNull) // - COMMENT1 (VARCHAR - 255 - Null) // - PHOTO1 (VARCHAR - 255 - Null)) // - PICTO1 (VARCHAR - 255 - Null) // Important : conserver le champ COMMENT1, il est necessaire en mode AJOUTER // --------------------------------------------------------------------------------------------------------------------- // mettre le nom de la table dans une variable : $table = 'MATABLE'; // REMARQUE : on peut utiliser ce fichier pour PLUSIEURS TABLES (de meme structure) // $table = $_GET['CAT']; // (preciser le nom de la table a l'appel du fichier : MONFICHIER_LISTE.php?CAT=MATABLE) // --------------------------------------------------------------------------------------------------------------------- // Les photos et pictos sont stockes dans un dossier deprotege en ecriture $chemincourt = 'repIMAGES/'; // --------------------------------------------------------------------------------------------------------------------- // sélection de toutes les fiches de la table $query = 'SELECT * FROM '.$table.' WHERE PHOTO1<>"" ORDER BY NUM DESC'; $result = mysql_query($query) or die('Erreur SQL ! '.$query.'<br/>'.mysql_error()); ?> <html><head><title></title></head> <body><center> <div> <?php echo 'TABLE '.$table; ?><br/> <a href="MONFICHIER_FORM.php?CAT=<?php echo $table; ?>&TRAITER=AJOUTER">AJOUTER NOUVEAU</a> </div> <div> <table border="1"> <tr> <?php // --------------------------------------------------------------------------------------------------------------------- // AFFICHAGE tant qu'il y a des fiches while ($val = mysql_fetch_array($result)) { ?> <td> <a href="MONFICHIER_FORM.php?CAT=<?php echo $table; ?> &TRAITER=MODIFIER&NUM=<?php echo $val['NUM']; ?>"> MODIFIER</a> <a href="MONFICHIER_FORM.php?CAT=<?php echo $table; ?> &TRAITER=SUPPRIMER&NUM=<?php echo $val['NUM']; ?>"> Supprimer</a><br/> <?php if ($val[PICTO1] != "") { ?> <img border="0" src="<?php echo $chemincourt.$val['PICTO1']; ?>" <?php fct_affich_image(100, 100, $chemincourt.$val['PICTO1']) ?>> <?php } ?> </td> <?php } // fin while // --------------------------------------------------------------------------------------------------------------------- ?> </tr> </table> </div> </center></body></html> <?php // liberation de la ressource et deconnexion mysql_free_result($result); mysql_close(); ?> | | | MONFICHIER_FORM.php | dans cet exemple : on affiche - le bon formulaire en fonction de l'option choisie (ajouter, modifier, supprimer) - la fiche concernée (photo et commentaire) | | | | <?php // connexion a la base de donnees include("_connexion.php"); // --------------------------------------------------------------------------------------------------------------------- // Répertoire des photos et pictos (déprotégé) $chemincourt = 'repIMAGES/'; // --------------------------------------------------------------------------------------------------------------------- // recuperation du nom de la TABLE $table=$_GET['CAT']; // recuperation du mode de traitement (AJOUTER - MODIFIER - SUPPRIMER) $TRAITER=$_GET['TRAITER']; // --------------------------------------------------------------------------------------------------------------------- if ($TRAITER == 'MODIFIER' || $TRAITER == 'SUPPRIMER') { //on recupere aussi le numero de la fiche $NUM=$_GET['NUM']; // on recupere les donnees la fiche numero NUM $query = 'SELECT * FROM '.$table.' WHERE NUM = '. $NUM; $result = mysql_query($query) or die('Erreur SQL ! '.$query.'<br/>'.mysql_error()); $val = mysql_fetch_array($result); } // --------------------------------------------------------------------------------------------------------------------- ?> <html><head><title></title></head> <body><center> <?php // --------------------------------------------------------------------------------------------------------------------- if ($TRAITER == 'AJOUTER') { ?> <div> <FORM name="AJOUTER" method="post" ENCTYPE="multipart/form-data" action="MONFICHIER_TRAITER.php"> <INPUT type="hidden" name="CAT" value="<?php echo $table; ?>"> <INPUT type="hidden" name="TRAITER" value="<?php echo $TRAITER; ?>"> AJOUTER<br/> Légende :<INPUT type="text" name="COMMENT1" size="50"><br/> PHOTO :<INPUT TYPE=FILE NAME="PHOTO1" size="50"><br/> <a href="#" onclick="history.back()">ANNULER</a> <INPUT type="submit" value="CONFIRMER" name="CONFIRMER"> <INPUT type="reset" value="Rétablir" name="B2"> </FORM> </div> <?php } // fin if AJOUTER // --------------------------------------------------------------------------------------------------------------------- if ($TRAITER == 'MODIFIER') { ?> <div> <FORM name="MODIFIER" method="post" ENCTYPE="multipart/form-data" action="MONFICHIER_TRAITER.php"> <INPUT type="hidden" name="CAT" value="<?php echo $table; ?>"> <INPUT type="hidden" name="TRAITER" value="<?php echo $TRAITER; ?>"> <INPUT type="hidden" name="NUM" value="<?php echo $NUM; ?>"> <INPUT type="hidden" name="PHOTO1avant" value="<?php echo $val['PHOTO1']; ?>"> <INPUT type="hidden" name="PICTO1avant" value="<?php echo $val['PICTO1']; ?>"> MODIFIER<br/> Légende :<INPUT type="text" name="COMMENT1" size="50" value="<?php echo $val['COMMENT1']; ?>"><br/> <?php if ($val['PHOTO1'] != "") { ?> <img border="0" src="<?php echo $chemincourt.$val['PHOTO1']; ?>"><br/> <?php } ?> PHOTO :<INPUT TYPE=FILE NAME="PHOTO1" size="50"><br/> <a href="#" onclick="history.back()">ANNULER</a> <INPUT type="submit" value="CONFIRMER" name="CONFIRMER"> <INPUT type="reset" value="Rétablir" name="B2"> </FORM> </div> <?php } // fin if MODIFIER // --------------------------------------------------------------------------------------------------------------------- if ($TRAITER == 'SUPPRIMER') { ?> <div> <FORM name="SUPPRIMER" method="post" ENCTYPE="multipart/form-data" action="MONFICHIER_TRAITER.php"> <INPUT type="hidden" name="CAT" value="<?php echo $table; ?>"> <INPUT type="hidden" name="TRAITER" value="<?php echo $TRAITER; ?>"> <INPUT type="hidden" name="NUM" value="<?php echo $NUM; ?>"> <INPUT type="hidden" name="PHOTO1avant" value="<?php echo $val['PHOTO1']; ?>"> <INPUT type="hidden" name="PICTO1avant" value="<?php echo $val['PICTO1']; ?>"> SUPPRIMER ? (ATTENTION : toute suppression est définitive !)<br/> <a href="#" onclick="history.back()">ANNULER</a> <INPUT type="submit" value="CONFIRMER" name="CONFIRMER"><br/> <?php echo $val['COMMENT1']; ?> <?php if ($val['PHOTO1'] != "") { ?> <br/><img border="0" src="<?php echo $chemincourt.$val['PHOTO1']; ?>"> <?php } ?> </FORM> </div> <?php } // fin if SUPPRIMER // --------------------------------------------------------------------------------------------------------------------- ?> </center> </body></html> <?php // liberation de la ressource et deconnexion if (($TRAITER == 'MODIFIER') || ($TRAITER == 'SUPPRIMER')) { mysql_free_result($result); } mysql_close(); ?> | | | MONFICHIER_TRAITER.php | dans cet exemple : TRAITEMENT : 0- gestion des erreurs - Restrictions sur les fichiers : jpg, jpeg, png ou gif - 1Mo maxi Si "AJOUTER" ou MODIFIER" 1- TELECHARGER la photo dans le répertoire - PHOTO : on enregistre en ajoutant NUM- devant le nom de l'image uploadée NUM est le numéro auto -la CLE primaire- de la fiche dans la base de données On associe donc l'image à la fiche concernée et on rend le nom de l'image unique. (on évite ainsi toute confusion, même si on upload plus tard des images de même nom) 2- REDIMENSIONNEMENT (si nécessaire) : (on utilise les fonctions de redimensionnement "physique") - PHOTO ? (ex. : on veut une largeur maxi de 600 pixels) - PICTO ? (ex. : on veut 100 x 100 pixels maxi) --> Si oui : on renomme le PICTO = picto-PHOTO --> Si non : PICTO = PHOTO 3- Enregistrement dans la base de données (noms des photo et picto), 4- Suppression des anciens photo et picto du répertoire Si "SUPPRIMER" 1- suppression de la fiche concernée dans la base de données, 2- supression des photo et picto concernés dans le répertoire. | | | | <?php // connexion a la base de donnees include("_connexion.php"); // FONCTIONS de redimensionnement "physique" include("fct_redim_image.php"); // include("fct_crop_image.php"); // (inutile ici) // --------------------------------------------------------------------------------------------------------------------- // Répertoire des photos et pictos (déprotégé) $cheminlong = realpath('repIMAGES').'\\'; $chemincourt = 'repIMAGES/'; // ------------------------------------------------------------- // recuperation du nom de la TABLE $table=$_POST['CAT']; // recuperation du mode de traitement (AJOUTER - MODIFIER - SUPPRIMER) $TRAITER=$_POST['TRAITER']; // ------------------------------------------------------------- // Restrictions sur les fichiers : $FileSizeMax = 1000000; $ExtfichierOK = '" jpg jpeg png gif"'; // (NB : l espace avant .jpg est important) // --------------------------------------------------------------------------------------------------------------------- // GESTION DES ERREURS (upload fichier) // (ne concerne que les options "AJOUTER" et "MODIFIER") // --------------------------------------------------------------------------------------------------------------------- $erreurfile = 0; // si un fichier N a PAS ete poste if ($_FILES['PHOTO1']['size']<=0 && $TRAITER == 'AJOUTER') { echo 'isset ? NON<br/>'; $erreurfile = 1; echo 'Erreur ! Pas de fichier IMAGE défini<br/>'; echo '<a href="#" onclick="history.back()">Retour au formulaire</a>'; } if ($_FILES['PHOTO1']['size']<=0 && $TRAITER == 'MODIFIER' && $_POST['PHOTO1avant']=='') { echo 'isset ? NON<br/>'; $erreurfile = 1; echo 'Erreur ! Pas de fichier IMAGE défini<br/>'; echo '<a href="#" onclick="history.back()">Retour au formulaire</a>'; } // ------------------------------------------------------------- // si un fichier a bien ete poste if ($_FILES['PHOTO1']['size']>0 && ($TRAITER == 'AJOUTER' || $TRAITER == 'MODIFIER')) { echo 'isset ? OUI<br/>'; // on verifie les restrictions sur les fichiers // extension $tabfile = explode('.',$_FILES['PHOTO1']['name']); $extension = $tabfile[sizeof($tabfile)-1]; // dernier element $extension = strtolower($extension); // on met en minuscule if (strpos($ExtfichierOK,$extension)=='') { $erreurfile = 1; echo 'Erreur ! Ce n\'est pas un fichier IMAGE (jpg, jpeg, png ou gif)<br/>'; echo '<a href="#" onclick="history.back()">Retour au formulaire</a>'; } // taille maxi autorisee elseif ($_FILES['PHOTO1']['size'] > $FileSizeMax) { $erreurfile = 1; echo 'Erreur ! Taille de fichier supérieure à la taille maxi autorisée ('.$FileSizeMax.' octets)<br/>'; echo '<a href="#" onclick="history.back()">Retour au formulaire</a>'; } elseif (UPLOAD_ERR_OK<>0 && UPLOAD_ERR_FORM_SIZE==2) { $erreurfile = 1; echo 'Erreur ! Taille de fichier trop important ('.$FileSizeMax.' octets)<br/>'; echo '<a href="#" onclick="history.back()">Retour au formulaire</a>'; } } // --------------------------------------------------------------------------------------------------------------------- // si PAS d ERREUR : traitement if ($erreurfile == 0) { echo 'TRAITEMENT OK<br/>'; // --------------------------------------------------------------------------------------------------------------------- // TRAITEMENT du formulaire // --------------------------------------------------------------------------------------------------------------------- if ($TRAITER == 'AJOUTER') { // recuperation des elements du formulaire $COMMENT = addslashes($_POST['COMMENT1']); // ------------------------------------------------------------- // ENREGISTREMENT du COMMENT dans la BASE DE DONNEES par INSERT $listechamps = 'COMMENT1'; $listevaleurs = '\''.$COMMENT.'\''; $queryNEW = 'INSERT INTO '.$table.'('.$listechamps.') VALUES('.$listevaleurs.')'; $resultNEW = mysql_query($queryNEW) or die('Erreur SQL ! '.$queryNEW.'<br/>'.mysql_error()); // ------------------------------------------------------------- // recuperation du NUM en selectionnant LA DERNIERE fiche cree $query = 'SELECT MAX(NUM) AS NUMmax FROM '.$table; $result = mysql_query($query) or die('Erreur SQL ! '.$query.'<br/>'.mysql_error()); $val_NUMmax = mysql_fetch_array($result); $NUM = $val_NUMmax['NUMmax']; } // --------------------------------------------------------------------------------------------------------------------- if ($TRAITER == 'MODIFIER') { // recuperation des elements du formulaire $NUM=$_POST['NUM']; $COMMENT = addslashes($_POST['COMMENT1']); // ------------------------------------------------------------- // ENREGISTREMENT dans la BASE DE DONNEES par UPDATE $SQL = 'UPDATE '.$table.' SET COMMENT1=\''.$COMMENT.'\' WHERE NUM= '.$NUM; mysql_query($SQL); // ------------------------------------------------------------- $PHOTOavant = $_POST['PHOTO1avant']; $PICTOavant = $_POST['PICTO1avant']; // par defaut $PHOTO = $PHOTOavant; $PICTO = $PICTOavant; } // --------------------------------------------------------------------------------------------------------------------- // TRAITEMENT des champs FILE (PHOTOS et PICTOS) // --------------------------------------------------------------------------------------------------------------------- if (($TRAITER == 'AJOUTER') || ($TRAITER == 'MODIFIER')) { if(isset($_FILES['PHOTO1']) && $_FILES['PHOTO1']['size']>0) { // ------------------------------------------------------------- // upload de la PHOTO sous forme NUM_nomfichier // NUM etant la CLE primaire de la fiche, ce qui rend le nom UNIQUE $PHOTO = $NUM.'_'.$_FILES['PHOTO1']['name']; // ------------------------------------------------------------- // pour eviter tout probleme par la suite, on remplace jpeg par jpg $PHOTO = str_replace('.JPEG','.jpg',$PHOTO); $PHOTO = str_replace('.jpeg','.jpg',$PHOTO); // autre modification : remplacement des caracteres genants (espaces) $PHOTO = str_replace(' ','-',$PHOTO); // ------------------------------------------------------------- // extension $tabfile = explode('.',$PHOTO); $extension = $tabfile[sizeof($tabfile)-1]; // dernier element $extension = strtolower($extension); // on met en minuscule // ------------------------------------------------------------- // enregistrement du fichier image dans le repertoire $tempfile = $_FILES['PHOTO1']['tmp_name']; move_uploaded_file($tempfile, $chemincourt.$PHOTO); // ------------------------------------------------------------- // REDIMENSIONNEMENT et SAUVEGARDE de la PHOTO (si necessaire) // ------------------------------------------------------------- // on veut : une photo de 600 pixels maxi de large // ecraser (remplacer) la photo (meme rep, meme nom) $redimPHOTOOK = fct_redim_image(600,0,'','',$chemincourt,$PHOTO); // $redimPHOTOok =1 si OK // ------------------------------------------------------------- // REDIMENSIONNEMENT et SAUVEGARDE du PICTO // ------------------------------------------------------------- // on veut : un picto de 100 x 100 pixels maxi // enregistrer en ajoutant 'picto_' devant le nom de la photo // dans le meme repertoire que la photo $redimPICTOok = fct_redim_image(100,100,'','picto_'.$PHOTO,$chemincourt,$PHOTO); // $redimPICTOok =1 si OK // nom du picto pour la BD if ($redimPICTOok == 1) { $PICTO = 'picto_'.$PHOTO; } else { $PICTO = $PHOTO; } // ------------------------------------------------------------- // SUPPRESSION des anciennes PHOTOS dans le repertoire if ($TRAITER == 'MODIFIER') { if ($PHOTOavant != '' && $PHOTOavant != $PHOTO && $PHOTOavant != $PICTO) { unlink($cheminlong.$PHOTO1avant); // Suppression de la photo } if ($PICTOavant != '' && $PICTOavant != $PHOTO && $PICTOavant != $PICTO) { unlink($cheminlong.$PICTOavant); // Suppression du picto } } // ------------------------------------------------------------- } // ---------------------------------------------------------------- // enregistrement dans la table par UPDATE $SQL = 'UPDATE '.$table.' SET PHOTO1=\''.$PHOTO.'\' WHERE NUM= '.$NUM; mysql_query($SQL); $SQL = 'UPDATE '.$table.' SET PICTO1=\''.$PICTO.'\' WHERE NUM= '.$NUM; mysql_query($SQL); } // --------------------------------------------------------------------------------------------------------------------- if ($TRAITER == 'SUPPRIMER') { // recuperation des elements du formulaire $NUM=$_POST['NUM']; $PHOTOavant=$_POST['PHOTO1avant']; $PICTOavant=$_POST['PICTO1avant']; // ------------------------------------------------------------- // SUPPRESSION de la fiche numero NUM dans la BD $query = 'DELETE FROM '.$table.' WHERE NUM = '.$NUM ; $result = mysql_query($query) or die('Erreur SQL ! '.$query.'<br/>'.mysql_error()); // ------------------------------------------------------------- // SUPPRESSION des PHOTOS dans le repertoire if ($PHOTOavant != '') { unlink($cheminlong.$PHOTOavant); // Suppression de la photo } if ($PICTOavant != '' && $PICTOavant != $PHOTOavant) { unlink($cheminlong.$PICTOavant); // Suppression du picto } } // --------------------------------------------------------------------------------------------------------------------- ?> <html><head><title></title></head> <body><div align="center"> <?php // --------------------------------------------------------------------------------------------------------------------- // AFFICHAGE // --------------------------------------------------------------------------------------------------------------------- if (($TRAITER == 'AJOUTER') || ($TRAITER == 'MODIFIER')) { // ------------------------------------------------------------- // recuperation des donnees de la nouvelle fiche pour reaffichage $query = 'SELECT * FROM '.$table.' WHERE NUM = '. $NUM; $result = mysql_query($query) or die('Erreur SQL ! '.$query.'<br/>'.mysql_error()); $val = mysql_fetch_array($result); // ------------------------------------------------------------- if ($TRAITER == 'AJOUTER') { echo 'LA PHOTO a été AJOUTEE.<br/>'; } if ($TRAITER == 'MODIFIER') { echo 'LA PHOTO a été MODIFIEE.<br/>'; } ?> <a href="MONFICHIER_LISTE.php?CAT=<?php echo $table; ?>">RETOUR</a><br/><br/> <?php echo $val['COMMENT1']; ?><br/> <?php if ($val['PHOTO1'] != "") { ?> <img border="0" src="<?php echo $chemincourt.$val['PHOTO1']; ?>"> <?php } ?> <?php } // --------------------------------------------------------------------------------------------------------------------- if ($TRAITER == 'SUPPRIMER') { ?> LA PHOTO a été SUPPRIMEE.<br/> <a href="MONFICHIER_LISTE.php?CAT=<?php echo $table; ?>">RETOUR</a> <?php } // --------------------------------------------------------------------------------------------------------------------- } // fin du traitement si PAS d ERREUR ?> </div> </body></html> <?php // Déconnexion mysql_close(); ?> | | | Compléments | Utilisation dans un espace d'administration : voir http://www.phpcs.com/tutoriaux/PHP-ADMINISTRER-LIGNE-PROTECTION-PAGES_882.aspx Utilisation par les visiteurs (espace membre): On doit d'abord récupérer l'IDvisiteur. (le visiteur ne doit pas avoir accès à toute la base, mais seulement à ses propres photos !) - soit il a ses propres tables (ex. IDvisiteur_MATABLE1, ...) - soit vérifier ses droits d'accès avant ...
Traitement de plusieurs tables : Déja prévu : le nom de la table étant enregistré dans la variable "$table", il est simple de changer de table : Dans le fichier MONFICHIER_LISTE.php Au lieu de : $table = 'MATABLE'; On met : $table = $_GET['CAT']; En précisant à l'appel du fichier : MONFICHIER_LISTE.php?CAT=MATABLE | | | 5- Utilisation avec un dossier | | Hypothèse Vous avez un dossier "repPHOTOS" contenant déjà des images. Vous souhaitez créer des images de prévisualisation (pictos), de 150 x 100 pixels maxi, et les enregistrer dans le dossier "repPHOTOS/repPICTOS".
NB S'assurer que les droits en écriture ont été donnés aux dossiers (chmod ou via logiciel FTP)
Principe - ouvrir le répertoire, - lire les fichiers - redimensionner (si nécessaire) en fonction des conditions requises --> utilisation de la fonction fct_redim_image(...) - enregistrer le picto dans le dossier de destination.
Remarque Par défaut, la fonction fct_redim_image(...) ne redimensionne pas les images plus petites que les dimensions spécifiées. Pour créer des pictos, pas de problème. Sinon, Une adaptation de la fonction pourrait être nécessaire ... | | MONDOSSIER_REDIM.php | | <?php // FONCTIONS de redimensionnement "physique" include("fct_redim_image.php"); // include("fct_crop_image.php"); // (inutile ici) // --------------------------------------------------------------------------------------------------------------------- // repertoire Source $rep_Src = "repPHOTOS/"; // repertoire de Destination $rep_Dst = "repPHOTOS/repPICTOS/"; // S'assurer que les droits en écriture ont été donnés aux dossiers (chmod ou via logiciel FTP) // --------------------------------------------------------------------------------------------------------------------- ?> <html><head><title></title></head> <body><center> <?php // --------------------------------------------------------------------------------------------------------------------- // Ouverture du dossier Source $ouvredir = opendir($rep_Src); // --------------------------------------------------------------------------------------------------------------------- // pour chaque fichier du repertoire ... while ($img_Src = readdir($ouvredir)) { // si le fichier existe if(is_file($rep_Src.$img_Src)) { // ------------------------------------------------------------- // CHOIX de redimensionnement : picto de 150 x 100 pixels maxi // nom du picto : pict-(nom photo) $img_Dst = 'pict-'.$img_Src; // ------------------------------------------------------------- // REDIMENSIONNEMENT (si les conditions sont correctes) $RedimOK = fct_redim_image(150, 100, $rep_Dst, $img_Dst, $rep_Src, $img_Src) // ------------------------------------------------------------- if ($RedimOK == 1 ) { // Affichage de confirmation d'écriture echo 'Picto créé : '.$rep_Dst.$img_Dst.'...<br/>'; } } // fin si existe } // fin while // --------------------------------------------------------------------------------------------------------------------- // Fermeture du dossier closedir($ouvredir); // --------------------------------------------------------------------------------------------------------------------- echo '<br/>Les pictos se trouvent dans le dossier '.$rep_Dst.'<br/>'; ?> </center> </body></html> | | |
Historique
- 26 août 2008 14:59:18 :
- Mise en page
- 26 août 2008 15:00:25 :
- mise en page
- 10 septembre 2008 09:47:08 :
- Ajout de FONCTIONS de redimensionnement.
Refonte complète du tuto.
- 10 septembre 2008 09:57:32 :
- -
- 10 septembre 2008 15:15:16 :
- Ajout de la fonction :
Redimensionnement "physique crop centré"
Commentaires
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SYSTEME D'AMISYSTEME D'AMI par moza2409
Cliquez pour lire la suite par moza2409
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|