Diaporama avec ajout et redimensionement de photos, création de coins arrondis en php et affichage en javascript

0/5 (44 avis)

Vue 11 300 fois - Téléchargée 1 558 fois

Description

Bonjour, voici un script permettant de générer un diaporama en javascript affichant les photos extraite d'un répertoire. Le script permet d'uploader et de supprimer une photo, d'arrondir ses angles, de la redimensionner et de créer une miniature de la photo.
Le code nécessite trois autres fichier et un dossier image pour fonctionner (pour l'affichage de la partie javascript).
Je suis débutant et comme beaucoup d'entre vous autodidacte ... C'est pourquoi je m'excuse d'avance des possibles incohérence dans mon code ainsi que dans mes commentaires ...
La partie javascript du diaporama a été récupéré sur un autre site, mais je ne me souvient plus de l'auteur. Je le remercie encore si il se reconnaît. Mais vous pourrez utiliser le diapo que vous voudrez.
J'espère que vous aurez de nombreux commentaires afin de m'aider a améliorer ce bout de code.
Merci d'avance.
Giloum.
Voici la deuxième version de ce code, modifié par Crasygogo.

Source / Exemple :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">

<head>
<title>Diaporama</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="../../css/diaporama.css" />
<style type="text/css">
body
	{
		background: white;
		font-family:Arial, Helvetica, sans-serif;
	}
div#container
	{
		text-align: left;
	}
a
	{
		color: #385898;
		font-size:14px;
		font-weight:bold;
		text-decoration:none;
	}
legend
	{
		color: #385898;
		font-size:12px;
	}
</style>
<script type="text/javascript" src="../../javascript/jquery-1.3.1.js"></script>
<script type="text/javascript" src="../../javascript/jquery.transition-0.2.1.pack.js"></script>
</head>

<body>
<?php
/*********************** PARAMETRAGE DU SCRIPT ***********************/

// Hauteur maxi des images
define("HAUTEUR_MAXI_IMAGE", "300");

// Hauteur maxi des miniatures
define("HAUTEUR_MAXI_THUMB", "50");

// Poids maxi d'un fichier
define("POIDS_FICHIER_MAX", "20000000");

// Rayon de l'arrondi d'une image
define("RAYON_ARRONDI_IMAGE", "30");

// Rayon de l'arrondi d'une miniature
define("RAYON_ARRONDI_THUMB", "10");

// Titre du diaporama
define("GALLERY_TITLE", "Diaporama");

// Démarage automatique
define("GALLERY_AUTORUN", "true");

// Temps d'affichage de chaque image
define("GALLERY_IMAGE_DISPLAY_TIME", "2000");

// Durée de la transition
define("GALLERY_IMAGE_TRANSITION_TIME", "500");

// Hauteur maxi des images de la galerie
define("GALLERY_IMAGE_MAX_HEIGHT", "300");

// Largeur maxi des images de la galerie
define("GALLERY_IMAGE_MAX_WIDTH", "400");

// Hauteur maxi des miniatures de la galerie
define("GALLERY_THUMB_MAX_HEIGHT", "50");

// Largeur maxi des miniatures de la galerie
define("GALLERY_THUMB_MAX_WIDTH", "66");

// Afficher le titre du diaporama
define("GALLERY_DISPLAY_TITLE", "true");

// Afficher le titre des images
define("GALLERY_DISPLAY_CAPTION", "true");

// Affichage en Consultation ou en Modification selon cette variable:
$_SESSION['admin']=true;

/******************* FIN DU PARAMETRAGE DU SCRIPT ********************/

// On appelle la fonction avec en paramètre le nom du dossier à scanner:
diaporama("../images_diaporama");

/***********************************************************************************************************************************************************************
SCIPT PERMETTANT DE GENERER UN DIAPORAMA EN JAVASCRIPT AFFICHANT AUTOMATIQUEMENT LES PHOTOS EXTRAITES D'UN REPERTOIRE.
APRES VERIFICATION DES DROITS D'UTILISATEURS, LE SCRIPT PERMET D'UPLOADER, D'ARRONDIR LES ANGLES, DE REDIMENSIONNER, ET DE CREER UNE MINIATURE DE LA PHOTO.

                                                                                                                                                                                                                                                                                                                                              • /
/********************************************************************************************** Fonction permettant l'ajout d'une photo. $dossier_destination est le dossier de destination ou les fichiers seront enregistré, si le dossier n'existe pas, il sera crée automatiquement ainsi que le sous dossier contenant les mininiature. Le chemin du dossier doit etre indiqué depuis la page ou l'on appelle la fonction. Les extensions autorisées sont 'png', 'PNG', 'gif', 'GIF', 'jpg', 'JPG', 'jpeg', 'JPEG'. $code_couleur_fond est la couleur de fond du diaporama
                                                                                                                                                                                            • /
function diaporama($dossier_destination) { // On verifie que l'utilisateur possede les droit pour administrer le script if(isset ($_SESSION['admin']) && $_SESSION['admin']==true) { // On verifie que le dossier ou l'on veut enregistrer existe, sinon on le creér en lui donnant les droit 755 if(is_dir ($dossier_destination )==false) { mkdir ("$dossier_destination",0755); } // On verifie que le dossier ou l'on veut enregistrer les miniatures existe, sinon on le creér en lui donnant les droit 755 $dossier_miniature = $dossier_destination."/miniature"; if(is_dir($dossier_miniature )==false) { mkdir("$dossier_miniature",0755); } // Si l'utilisateur arrive sur cette page en voulant supprimer une photo if(isset($_GET['supprimerphoto'])) { $_GET['supprimerphoto'] = utf8_decode($_GET['supprimerphoto']); // On teste si les fichiers existent if(file_exists($dossier_destination.'/'.$_GET['supprimerphoto'])) { // On suprime le fichier unlink($dossier_destination.'/'.$_GET['supprimerphoto']); } if(file_exists($dossier_destination.'/miniature/'.$_GET['supprimerphoto'])) { // On suprime le fichier unlink($dossier_destination.'/miniature/'.$_GET['supprimerphoto']); } } // fin du isset($_GET['supprimerphoto']) // On teste si la variable $_FILES declare une erreur if(isset($_FILES['fichier']['error'])) { switch ($_FILES['fichier']['error']) { case 1: // UPLOAD_ERR_INI_SIZE echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !"; break; case 2: // UPLOAD_ERR_FORM_SIZE echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !"; break; case 3: // UPLOAD_ERR_PARTIAL echo "L'envoi du fichier a été interrompu pendant le transfert !"; break; case 4: // UPLOAD_ERR_NO_FILE echo "Le fichier que vous avez envoyé a une taille nulle !"; break; }// Fin du switch } // Fin du isset($_FILES['fichier']['error']) // On teste si un fichier a eté envoyé if(isset($_FILES['fichier'])) { // On teste si le fichier n'est pas trop gros if($_FILES['fichier']['size'] <= POIDS_FICHIER_MAX) { // On décode le nom du fichier $_FILES['fichier']['name'] = utf8_decode($_FILES['fichier']['name']); // On recupere le type d'extension du fichier et on le place dans $extension_upload $infosfichier = pathinfo($_FILES['fichier']['name']); $extension_upload = strtolower($infosfichier['extension']); // On donne la liste des extensions autorisées $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png'); // On verifie si l'extension du fichier correspond a une extension autorisé if (in_array($extension_upload, $extensions_autorisees)) { // on creer le chemin du repertoire de destination $chemin_fichier=$dossier_destination.'/'; $chemin_fichier_miniature=$dossier_miniature.'/'; // On copie le fichier original dans le repertoire courant // Copier d'abord le fichier permet d'economiser la memoire du serveur move_uploaded_file($_FILES['fichier']['tmp_name'], $_FILES['fichier']['name']); // On fixe les droit sur le fichier a 0644 chmod($_FILES['fichier']['name'],0644); // On redimensione le fichier image pour créer un fichier image png de dimension reduite $nom_fichier_modifier = redimensionner_image($_FILES['fichier']['name'], HAUTEUR_MAXI_IMAGE, $chemin_fichier); // On arondi les angles de l'image arrondir_angle($nom_fichier_modifier, RAYON_ARRONDI_IMAGE); // On redimensione le fichier reduit pour créer une miniature $nom_fichier_miniature = redimensionner_image($_FILES['fichier']['name'], HAUTEUR_MAXI_THUMB, $chemin_fichier_miniature); // On arondi les angles de l'image miniature arrondir_angle($nom_fichier_miniature, RAYON_ARRONDI_THUMB); // On suprime le fichier original unlink($_FILES['fichier']['name']); }// Fin du test de l'extension else echo "extension non autorisée"; } // Fin du test du poid du fichier else echo "fichier trop lourd"; }// Fin de l'isset $_FILES['fichier'] }// fin du if $_SESSION['admin']==true // On affiche le diaporama recuperant les photos dans le repertoire $dossier_destination afficher_diaporama($dossier_destination); // On verifie que l'utilisateur possede les droit pour administrer le script if(isset ($_SESSION['admin'])&&$_SESSION['admin']==true) { // On affiche le formulaire d'envoi d'une image ?> <center> <br /><hr /> <form method="POST" action="#" enctype="multipart/form-data"> <fieldset style="width:340px;"><legend>&nbsp;Ajouter une image&nbsp;</legend> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo POIDS_FICHIER_MAX; ?>" /> <input type="file" name="fichier" size="35" /><br /> <input type="submit" name="envoi" value="Envoyer la photo" /> </fieldset> </form> </center><?php // Fin du formulaire // On affiche les photos et un lien pour les suprimer afficher_suprimer_photos($dossier_destination); } }// Fin fonction diaporama /********************************************************************************************** FONCTION PERMETTANT DE REDIMENSIONER UNE PHOTO A UNE TAILLE VOULU La variable $image corespond a l'image source Les variable $hauteur et $largeur corespondent a la largeur-maxi et la hauteur-maxi voulu La variable $masque correspond a l'image que l'on superposera a l'image de depart La variable $chemin_fichier correspond au dossier de destination + / + nom de fichier original
                                                                                                                                                                                            • /
function redimensionner_image($image, $hauteur, $chemin_fichier) { // On recupere l'extension de l'image $infosfichier = pathinfo($image); $extension = strtolower($infosfichier['extension']); switch($extension) { case "jpg" : $image_create=imagecreatefromjpeg($image); break; case "jpeg" : $image_create=imagecreatefromjpeg($image); break; case "gif" : $image_create=imagecreatefromgif($image); break; case "png" : $image_create=imagecreatefrompng($image); break; } // on recupere la taille de l'image $taille=getimagesize($image); // echo "Hauteur originale de l'image: ".$taille[1]."<br />"; // echo "Largeur originale de l'image: ".$taille[0]."<br />"; // on calcule le ratio de redimentionement entre la hateur de l'image et la hauteur voulu $ratio=$taille[1]/$hauteur; // echo "ratio= ".$ratio."<br />"; // On calcule les nouvelles dimensions de l'image $new_largeur=$taille[0]/$ratio; $new_hauteur=$taille[1]/$ratio; // echo "Nouvelle Hauteur de l'image: ".$new_hauteur."<br />"; // echo "Nouvelle Largeur de l'image: ".$new_largeur."<br /><br />"; // On creer l'image de destination vide avec les nouvelles dimensions $new_image = imagecreatetruecolor($new_largeur, $new_hauteur); // On copie l'image uploader dans l'image vide $copy = imagecopyresampled($new_image, $image_create, 0, 0, 0, 0, $new_largeur, $new_hauteur, $taille[0], $taille[1]); // On remplace l'extension du fichier image par png $nom_du_fichier_png = str_replace($infosfichier['extension'],"png",$infosfichier['basename']); // On enregistre l'image au format png imagepng($new_image,$chemin_fichier."/".$nom_du_fichier_png); // On detruit l'image $new_image imagedestroy($new_image); // On renvoie le chemin du fichier créé return $chemin_fichier."/".$nom_du_fichier_png; }// Fin de la fontion redimensionner_image /********************************************************************************************** FONCTION PERMETTANT D'AFFICHER ET DE SUPRIMER UNE PHOTO On scanne le dossier afin de recuperer la liste de toutes les photos On affiche la liste des photos avec un lien permettant de suprimer la photo selectionée
                                                                                                                                                                                            • /
function afficher_suprimer_photos($dossier_destination) { // On verifie que le dossier de destination existe if(is_dir ($dossier_destination)==false) { echo "Dossier de destination inexistant "; } else { // On ouvre le dossier ou se trouve les photos $dossier = opendir($dossier_destination) or die('Erreur'); // On donne la liste des extensions de fichier a afficher $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png'); echo "\r\n <center>"; // On affiche les photos contenu dans le dossier while($resultat = readdir($dossier)) { // On teste si $resultat n'est pas un dossier ou un lien parrent if($resultat != '.' && $resultat != '..' && !is_dir($dossier_destination."/".$resultat) ) { // Encode le nom du fichier $resultat = utf8_encode($resultat); // On recupere l'extension du fichier $infosfichier = pathinfo($resultat); $extension = strtolower($infosfichier['extension']); // On verifie si l'extension du fichier correspond a une extension autorisé if(in_array($extension, $extensions_autorisees)) { // Pour lisibilité du code généré: echo "\r\n "; // On affiche la photo avec un lien pointant sur cette meme page avec en argument $_GET le nom de la photo echo "<hr /><br /><a href='?supprimerphoto=".$resultat."'>Supprimer la photo: ".$resultat."</a><br /><br />"; // Pour lisibilité du code généré: echo "\r\n "; // On affiche la photo avec un lien pointant sur cette meme page avec en argument $_GET le nom de la photo echo '<img src="'.$dossier_destination.'/miniature/'.$resultat.'" ><br /><br /><img src="'.$dossier_destination.'/'.$resultat.'" ><br /><br />'; } } }// Fin du while // On referme le dossier closedir($dossier); echo "\r\n </center>"; }// fin du else verification d'existance du dossier }// Fin de la fonction afficher_suprimer_photos /********************************************************************************************** FONCTION PRINCIPALE QUI S'OCCUPE DE SCANNER LE DOSSIER ET AFFICHER LE DIAPORAMA $dossier_destination: Le dossier à scanner pour afficher le diaporama
                                                                                                                                                                                            • /
function afficher_diaporama($dossier_destination) { // On ouvre le dossier ou se trouvent les photos $dossier = opendir($dossier_destination) or die('Erreur'); // On donne la liste des extensions autorisées $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png'); $contenu_dossier_photo = array(); $nom_photo = array(); // on affiche toutes les photos contenu dans le dossier while($resultat = readdir($dossier)) { // On teste si $resultat n'est pas un dossier ou un lien parrent if($resultat != '.' && $resultat != '..' && !is_dir($dossier_destination."/".$resultat) ) { // Encode le nom du fichier $resultat = utf8_encode($resultat); $fileChunks = array_reverse(explode(".", $resultat)); $extension_resultat = strtolower($fileChunks[0]); // On verifie si l'extension du fichier correspond a une extension autorisé if(in_array($extension_resultat, $extensions_autorisees)) { // On integre toute les photos dans un array $contenu_dossier_photo $contenu_dossier_photo[]=$resultat; $nom_photo[]=$fileChunks[1]; } }// Fin du test de $resultat } //Fin du while // On recupere l'indice du dernier enregistrement de l'array $contenu_dossier_photo $nb_photos=count($contenu_dossier_photo); // On genere le code javascript permettant d'afficher le diaporama if($nb_photos > 0) { ?> <script type="text/javascript"> $(document).ready(function(){ $('#diaporama').transition({ title: '<?php echo GALLERY_TITLE ?>', // Gallery title autoRun: <?php echo GALLERY_AUTORUN ?>, // Autorun slideshow ? displayTime: <?php echo GALLERY_IMAGE_DISPLAY_TIME ?>, // How long an image is displayed transitionTime: <?php echo GALLERY_IMAGE_TRANSITION_TIME ?>, // Duration of the fade in/fade out effect width: <?php echo GALLERY_IMAGE_MAX_WIDTH ?>, // Maximum width of the gallery images height: <?php echo GALLERY_IMAGE_MAX_HEIGHT ?>, // Maximum height of the gallery images thumbs: <?php echo $nb_photos ?>, // Number of thumbnails to display thumbSize: {width: <?php echo GALLERY_THUMB_MAX_WIDTH ?>, height: <?php echo GALLERY_THUMB_MAX_HEIGHT ?>}, // Size of each thumbnail displayTitle: <?php echo GALLERY_DISPLAY_TITLE ?>, // Display the gallery title displayCaption: <?php echo GALLERY_DISPLAY_CAPTION ?>, // Display the images caption images : [<?php // On affiche toute les lignes correspondant aux photos for($i=0; $i<$nb_photos; $i++) { // Pour lisibilité du code généré: echo "\r\n "; // Insertion de l'image: echo "{image: '".$dossier_destination."/".$contenu_dossier_photo[$i]."', thumb: '".$dossier_destination."/miniature/".$contenu_dossier_photo[$i]."', title: '".$nom_photo[$i]."'}"; // Pas de virgule après la dernière image: if($i<$nb_photos-1) { echo","; } } // Fin du for // Pour lisibilité du code généré: echo "\r\n "; ?>] }); }); </script> <div id="container"> <div id="diaporama"></div> </div> <?php }// Fin du code generé }// Fin de la fonction afficher_diaporama /********************************************************************************************** FONCTION PERMETTANT D'ARRONDIR LES ANGLES DE LA PHOTO $image La photo doit etre au format png On créer 4 images png correspondant au 4 angles On superpose ces 4 images a l'image de depart
                                                                                                                                                                                            • /
function arrondir_angle($image, $rayon_arrondi) { // Cette partie peut etre activé si le fichier source n'est pas au format png $image_create=imagecreatefrompng ($image); // on recupere la taille de l'image $taille=getimagesize($image); // On determine la largeur et la hauteur de l'image contenant les coin $largeur_coin = $rayon_arrondi/2; $hauteur_coin = $rayon_arrondi/2; // ********* Coin Bas Gauche ********/ // On créer une image vide nomé $image_coin de couleur $couleur_fond et de taille $rayon_arrondi $image_coin = imagecreate($largeur_coin, $hauteur_coin); // On attribu une couleur (noir transparent, normallement sa n'existe pas souvent) au fond $couleur_fond_coin = imagecolorallocatealpha($image_coin, 0, 0, 0, 0); // On attribu une couleur transparente $couleur_transparente_coin = imagecolorallocate($image_coin, 255, 255, 255); // pour le moment la couleur est blanche // On rend la couleur blanche transparente imagecolortransparent($image_coin, $couleur_transparente_coin); // On créer un cercle plein de rayon $rayon_arrondi, de position -2, -2 et de couleur $couleur_transparente_coin imagefilledellipse($image_coin,$rayon_arrondi-$largeur_coin,0, $rayon_arrondi, $rayon_arrondi, $couleur_transparente_coin); // On copie l'image $image_coin sur l'image principal $image imagecopy($image_create, $image_coin, 0, $taille[1]-$largeur_coin, 0, 0, $largeur_coin, $hauteur_coin); // On detruit l'image du coin imagedestroy($image_coin); // ********* Coin Bas Droit ********/ // On créer une image vide nomé $image_coin de couleur $couleur_fond et de taille $rayon_arrondi $image_coin = imagecreate($largeur_coin, $hauteur_coin); // On attribu une couleur (noir transparent, normallement sa n'existe pas souvent) au fond $couleur_fond_coin = imagecolorallocatealpha($image_coin, 0, 0, 0, 0); // On attribu une couleur transparente $couleur_transparente_coin = imagecolorallocate($image_coin, 255, 255, 255); // pour le moment la couleur est blanche // On rend la couleur blanche transparente imagecolortransparent($image_coin, $couleur_transparente_coin); // On créer un cercle plein de rayon $rayon_arrondi, de position -2, -2 et de couleur $couleur_transparente_coin imagefilledellipse($image_coin,0,0, $rayon_arrondi, $rayon_arrondi, $couleur_transparente_coin); // On copie l'image $image_coin sur l'image principal $image imagecopy($image_create, $image_coin, $taille[0]-$largeur_coin, $taille[1]-$hauteur_coin, 0, 0, $largeur_coin, $hauteur_coin); // On detruit l'image du coin imagedestroy($image_coin); // ********* Coin Haut Gauche ********/ // On créer une image vide nomé $image_coin de couleur $couleur_fond et de taille $rayon_arrondi $image_coin = imagecreate($largeur_coin, $hauteur_coin); // On attribu une couleur (noir transparent, normallement sa n'existe pas souvent) au fond $couleur_fond_coin = imagecolorallocatealpha($image_coin, 0, 0, 0, 0); // On attribu une couleur transparente $couleur_transparente_coin = imagecolorallocate($image_coin, 255, 255, 255); // pour le moment la couleur est blanche // On rend la couleur blanche transparente imagecolortransparent($image_coin, $couleur_transparente_coin); // On créer un cercle plein de rayon $rayon_arrondi, de position -2, -2 et de couleur $couleur_transparente_coin imagefilledellipse($image_coin,$rayon_arrondi-$hauteur_coin,$rayon_arrondi-$largeur_coin, $rayon_arrondi, $rayon_arrondi, $couleur_transparente_coin); // On copie l'image $image_coin sur l'image principal $image imagecopy($image_create, $image_coin, 0, 0, 0, 0, $largeur_coin, $hauteur_coin); // On detruit l'image du coin imagedestroy($image_coin); // ********* Coin Haut droit ********/ // On créer une image vide nomé $image_coin de couleur $couleur_fond et de taille $rayon_arrondi $image_coin = imagecreate($largeur_coin, $hauteur_coin); // On attribu une couleur (noir transparent, normallement sa n'existe pas souvent) au fond $couleur_fond_coin = imagecolorallocatealpha($image_coin, 0, 0, 0, 0); // On attribu une couleur transparente $couleur_transparente_coin = imagecolorallocate($image_coin, 255, 255, 255); // pour le moment la couleur est blanche // On rend la couleur blanche transparente imagecolortransparent($image_coin, $couleur_transparente_coin); // On créer un cercle plein de rayon $rayon_arrondi, de position -2, -2 et de couleur $couleur_transparente_coin imagefilledellipse($image_coin,0,$rayon_arrondi-$largeur_coin, $rayon_arrondi, $rayon_arrondi, $couleur_transparente_coin); // On copie l'image $image_coin sur l'image principal $image imagecopymerge($image_create, $image_coin, $taille[0]-$largeur_coin, 0, 0, 0, $largeur_coin, $hauteur_coin,100 ); // On detruit l'image du coin imagedestroy($image_coin); // On rend la couleur noir transparent, transparente ... $couleur_a_rendre_transparente = imagecolorallocatealpha($image_create, 0, 0, 0, 0); imagecolortransparent($image_create, $couleur_a_rendre_transparente); // On enregistre l'image png de la photo et des coins arrondis imagepng($image_create,$image); // On detruit l'image créer imagedestroy($image_create); } // Fin de la fonction arrondir_angle ?> </body> </html>

Conclusion :


Surtout n'hésitez pas a critiquer ce code afin de m'aider a l'améliorer !!!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

crazygogo
Messages postés
135
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2009
-
il manque le fichier jquery.transition-0.2.1.pack.js
giloum
Messages postés
17
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
26 février 2009
-
Merci Crazygogo, je viens de le rajouter ...
Mais je n'arrive pas a remettre la main sur le fichier non compressé.
C'est donc la version pack.
crazygogo
Messages postés
135
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2009
-
Je suis en train de modifier ta source car je la trouve très intéressante, je sais pas si on peut parler d'améliorations mais en tout cas je la remet à ma sauce...

Par exemple le tableau des extensions autorisées je le met que en minuscules et lors de la récupération de l'extension je fais un strtolower... Pareil lors du switch($extension)...

Dans la fonction afficher_diaporama je teste aussi les extensions car dans mon dossier image il y'a un fichier caché thumbs.db qui me provoque une image non trouvée dans le diaporama...

Je pense que le tableau $extensions_autorisees devrait pouvoir être déclaré qu'une seule fois mais on m'a dit que les globales c'était mal alors je n'ai pas modifié ce point la !!!

Dans la légende de l'image j'affiche le nom du fichier sans l'extension...

Je modifie aussi un peu la présentation...

Je vais poster le code modifié dans un autre message celui-ci étant déjà trop long !!!

:)
crazygogo
Messages postés
135
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2009
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="jquery-1.3.1.js"></script>
<script type="text/javascript" src="jquery.transition-0.2.1.pack.js"></script>
<link href="diaporama.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Diaporama</title>
</head>

<?php
// Affichage en Consultation ou en Modification selon cette variable:
$_SESSION['admin']=true;

/*
SCIPT PERMETTANT DE GENERER UN DIAPORAMA EN JAVASCRIPT AFFICHANT AUTOMATIQUEMENT LES PHOTOS EXTRAITES D’UN REPERTOIRE. APRES VERIFICATION DES DROITS D’UTILISATEURS, LE SCRIPT PERMET D’UPLOADER, D’ARRONDIR LES ANGLES, DE REDIMENSIONNER, ET DE CREER UNE MINIATURE DE LA PHOTO.
*/

/**********************************************************************************************/
// Fonction permettant l'ajout d'une photo.
// $taille_fichier_maxi est la taille maximum autorisé du fichier a envoyé.
// $dossier_destination est le dossier de destination ou les fichiers seront enregistré, si le dossier n'existe pas, il sera crée automatiquement ainsi que le sous dossier contenant les mininiature. Le chemin du dossier doit etre indiqué depuis la page ou l'on appelle la fonction.
// Les extensions autorisées sont 'png', 'PNG', 'gif', 'GIF', 'jpg', 'JPG', 'jpeg', 'JPEG'.
// $hauteur_maxi_photo est la hauteur maximum en pixels que aura la photo lors de son redimensionement
// $hauteur_maxi_miniature est la hauteur maximum en pixels que aura la photo lors de son redimensionement
// $rayon_coin_arrondi est la taille en pixels du rayon des arrondis des angles de la photo
// $code_couleur_fond est la couleur de fond du diaporama
/**********************************************************************************************/
function diaporama($taille_fichier_maxi, $dossier_destination, $hauteur_maxi_photo, $hauteur_maxi_miniature, $rayon_coin_arrondi, $rayon_coin_arrondi_miniature){
// On verifie que l'utilisateur possede les droit pour administrer le script
if(isset ($_SESSION['admin'])&&$_SESSION['admin']==true){
// On verifie que le dossier ou l'on veut enregistrer existe, sinon on le creér en lui donnant les droit 755
if(is_dir ($dossier_destination )==false){
mkdir ("$dossier_destination",0755);
}

// On verifie que le dossier ou l'on veut enregistrer les miniatures existe, sinon on le creér en lui donnant les droit 755
$dossier_miniature=$dossier_destination."/miniature";
if(is_dir ($dossier_miniature )==false){
mkdir ("$dossier_miniature",0755);
}

// Si l'utilisateur arrive sur cette page en voulant supprimer une photo
// On suprime la photo
if(isset($_GET['supprimerphoto'])){
// On teste si les fichiers existent
if(file_exists($dossier_destination.'/'.$_GET['supprimerphoto'])){
// On suprime le fichier
unlink($dossier_destination.'/'.$_GET['supprimerphoto']);
}
if(file_exists($dossier_destination.'/miniature/'.$_GET['supprimerphoto'])){
// On suprime le fichier
unlink($dossier_destination.'/miniature/'.$_GET['supprimerphoto']);
}
//echo "tentative de supression effectué de ".$dossier_destination.'/'.$_GET['supprimerphoto'];
}

// On teste si la variable $_FILES declare une erreur
if(isset($_FILES['fichier']['error'])){
switch ($_FILES['fichier']['error']){
case 1: // UPLOAD_ERR_INI_SIZE
echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";
break;
case 2: // UPLOAD_ERR_FORM_SIZE
echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
break;
case 3: // UPLOAD_ERR_PARTIAL
echo "L'envoi du fichier a été interrompu pendant le transfert !";
break;
case 4: // UPLOAD_ERR_NO_FILE
echo "Le fichier que vous avez envoyé a une taille nulle !";
break;
} // Fin du switch
}// Fin du test d'erreur

// On teste si un fichier a eté envoyé
if(isset($_FILES['fichier'])){
// On teste si le fichier n'est pas trop gros
if($_FILES['fichier']['size'] <= $taille_fichier_maxi){
// On recupere le type d'extension du fichier et on le place dans $extension_upload
$infosfichier = pathinfo($_FILES['fichier']['name']);
$extension_upload = strtolower($infosfichier['extension']);

// On donne la liste des extensions autorisées
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');

// On verifie si l'extension du fichier correspond a une extension autorisé
if (in_array($extension_upload, $extensions_autorisees)){
// on creer le chemin du repertoire de destination
$chemin_fichier=$dossier_destination.'/';
// echo "chemin du fichier: ".$chemin_fichier."
";
$chemin_fichier_miniature=$dossier_miniature.'/';
// echo "chemin du fichier miniature: ".$chemin_fichier_miniature."
";

// On copie le fichier original dans le repertoire courant
// Copier d'abord le fichier permet d'economiser la memoire du serveur
// Sinon probleme d'alocation memoire sur celeonet
move_uploaded_file($_FILES['fichier']['tmp_name'], $_FILES['fichier']['name']);

// On fixe les droit sur le fichier a 0644
chmod($_FILES['fichier']['name'],0644);

// On redimensione le fichier image pour créer un fichier image png de dimension reduite
$nom_fichier_modifier=redimensionner_image ($_FILES['fichier']['name'], $hauteur_maxi_photo, $chemin_fichier);

// On arondi les angles de l'image
arrondir_angle ($nom_fichier_modifier, $rayon_coin_arrondi);

// On redimensione le fichier reduit pour créer une miniature
$nom_fichier_miniature=redimensionner_image ($_FILES['fichier']['name'], $hauteur_maxi_miniature, $chemin_fichier_miniature);

// On arondi les angles de l'image miniature
arrondir_angle ($nom_fichier_miniature, $rayon_coin_arrondi_miniature);

// On suprime le fichier original
unlink($_FILES['fichier']['name']);

}// Fin du test de l'extension
else echo "extension non autorisé";
} // Fin du test du poid du fichier
else echo "fichier trop lourd";
}// Fin de l'isset $_FILES['fichier']
}// fin du if $_SESSION['admin']==true

afficher_diaporama($dossier_destination);

// On verifie que l'utilisateur possede les droit pour administrer le script
if(isset ($_SESSION['admin'])&&$_SESSION['admin']==true){
// On affiche le formulaire ?>
<center>

<hr />
<form method="POST" action="diaporama.php" enctype="multipart/form-data">
<fieldset style="width:340px;"><legend> Ajouter une image </legend>
" />

</fieldset>
</form>

</center><?php
// Fin du formulaire

// On affiche les photos et un lien pour les suprimer
afficher_suprimer_photos($dossier_destination);
}
}

/**********************************************************************************************/
// FONCTION PERMETTANT DE REDIMENSIONER UNE PHOTO A UNE TAILLE VOULU
// La variable $image corespond a l'image source
// Les variable $hauteur et $largeur corespondent a la largeur-maxi et la hauteur-maxi voulu
// La variable $masque correspond a l'image que l'on superposera a l'image de depart
// La variable $chemin_fichier correspond au dossier de destination + / + nom de fichier original
/**********************************************************************************************/
function redimensionner_image($image, $hauteur, $chemin_fichier){
// On recupere l'extension de l'image
$infosfichier = pathinfo($image);
$extension = strtolower($infosfichier['extension']);
switch($extension){
case "jpg" : $image_create=imagecreatefromjpeg($image); break;
case "jpeg" : $image_create=imagecreatefromjpeg($image); break;
case "gif" : $image_create=imagecreatefromgif($image); break;
case "png" : $image_create=imagecreatefrompng($image); break;
}

// on recupere la taille de l'image
$taille=getimagesize($image);
// echo "Hauteur originale de l'image: ".$taille[1]."
";
// echo "Largeur originale de l'image: ".$taille[0]."
";
// on calcule le ratio de redimentionement entre la hateur de l'image et la hauteur voulu
$ratio=$taille[1]/$hauteur;
// echo "ratio= ".$ratio."
";
// On calcule les nouvelles dimensions de l'image
$new_largeur=$taille[0]/$ratio;
$new_hauteur=$taille[1]/$ratio;
// echo "Nouvelle Hauteur de l'image: ".$new_hauteur."
";
// echo "Nouvelle Largeur de l'image: ".$new_largeur."

";

// On creer l'image de destination vide avec les nouvelles dimensions
$new_image=imagecreatetruecolor($new_largeur, $new_hauteur);

// On copie l'image uploader dans l'image vide
$copy=imagecopyresampled($new_image, $image_create, 0, 0, 0, 0, $new_largeur, $new_hauteur, $taille[0], $taille[1]) ;

// On remplace l'extension du fichier image par png
$nom_du_fichier_png=str_replace($infosfichier['extension'],"png",$infosfichier['basename']);
// On enregistre l'image au format png
imagepng($new_image,$chemin_fichier."/".$nom_du_fichier_png);

// On detruit l'image $new_image
imagedestroy($new_image);

// On renvoie le chemin du fichier créer
return $chemin_fichier."/".$nom_du_fichier_png;
}

/**********************************************************************************************/
// FONCTION PERMETTANT D'AFFICHER ET DE SUPRIMER UNE PHOTO
// On scanne le dossier afin de recuperer la liste de toutes les photos
// On affiche la liste des photos avec un lien permettant de suprimer la photo selectionée
// On suprime la photo
// On reafiche la page
/**********************************************************************************************/
function afficher_suprimer_photos($dossier_destination){
// On verifie que le dossier de destination existe
if(is_dir ($dossier_destination)==false){
echo "Dossier de destination inexistant ";
}
else{
// On ouvre le dossier ou se trouve les photos
$dossier = opendir($dossier_destination) or die('Erreur');

// On donne la liste des extensions de fichier a afficher
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');

echo "<center>";
// On affiche les photos contenu dans le dossier
while($resultat = readdir($dossier)){
// On teste si $resultat n'est pas un dossier ou un lien parrent
if($resultat != '.' && $resultat != '..' && !is_dir($dossier_destination."/".$resultat) ){
// $statut=is_file($resultat);
// On recupere l'extension du fichier
$infosfichier = pathinfo($resultat);
$extension = strtolower($infosfichier['extension']);

// On verifie si l'extension du fichier correspond a une extension autorisé
if(in_array($extension, $extensions_autorisees)){
// On affiche la photo avec un lien pointant sur cette meme page avec en argument $_GET le nom de la photo
echo "<hr />Supprimer la photo: ".$resultat."

";
echo '

';
}
}
}
// On referme le dossier
closedir($dossier);
echo "</center>";
}// fin du else verification d'existance du dossier
}

function afficher_diaporama($dossier_destination){
// On ouvre le dossier ou se trouvent les photos
$dossier = opendir($dossier_destination) or die('Erreur');

// On genere le code javascript permettant d'afficher le diaporama
?>
<script type="text/javascript" >
$(document).ready(function() {
$('#diaporama').transition({
autoRun: true,
displayTime: 5000,
transitionTime: 1500,
title: 'Diaporama',
width: 350,
height: 265,
thumbSize: {width: 74, height: 56},
images : [<?php

// On donne la liste des extensions autorisées
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');

// on affiche toutes les photos contenu dans le dossier
// avec une ligne speciale sans virgule a la fin pour le dernier element de l'array $resultat
while($resultat = readdir($dossier)){
// On teste si $resultat n'est pas un dossier ou un lien parrent
if($resultat != '.' && $resultat != '..' && !is_dir($dossier_destination."/".$resultat) ){
$fileChunks = array_reverse(explode(".", $resultat));
$extension_resultat = strtolower($fileChunks[0]);

// On verifie si l'extension du fichier correspond a une extension autorisé
if(in_array($extension_resultat, $extensions_autorisees)){
// On integre toute les photos dans un array $contenu_dossier_photo
$contenu_dossier_photo[]=$resultat;
$nom_photo[]=$fileChunks[1];
}
}
}

// On recupere l'indice du dernier enregistrement de l'array $contenu_dossier_photo
$nb_photos=count($contenu_dossier_photo);

// On affiche toute les lignes correspondant au photos sauf la derniere
for($i=0; $i<$nb_photos; $i++){
// Pour lisibilité du code généré:
echo "\r\n ";
// Insertion de l'image:
echo "{image: '".$dossier_destination."/".$contenu_dossier_photo[$i]."', thumb: '".$dossier_destination."/miniature/".$contenu_dossier_photo[$i]."', title: '".$nom_photo[$i]."'}";
// Pas de virgule après la dernière image:
if($i<$nb_photos-1){
echo",";
}
}
?>
]
});
});
</script>


<?php
}

/**********************************************************************************************/
// FONCTION PERMETTANT D'ARRONDIR LES ANGLES DE LA PHOTO $image
// La photo doit etre au format png
// On créer 4 images png correspondant au 4 angles
// On superpose ces 4 images a l'image de depart
/**********************************************************************************************/
function arrondir_angle($image, $rayon_arrondi){
// Cette partie peut etre activé si le fichier source n'est pas au format png
$image_create=imagecreatefrompng ($image);

// on recupere la taille de l'image
$taille=getimagesize($image);

// On determine la largeur et la hauteur de l'image contenant les coin
$largeur_coin = $rayon_arrondi/2;
$hauteur_coin = $rayon_arrondi/2;

// ********* Coin Bas Gauche ********/
// On créer une image vide nomé $image_coin de couleur $couleur_fond et de taille $rayon_arrondi
$image_coin = imagecreate($largeur_coin, $hauteur_coin);
// On attribu une couleur (noir transparent, normallement sa n'existe pas souvent) au fond
$couleur_fond_coin = imagecolorallocatealpha($image_coin, 0, 0, 0, 0);
// On attribu une couleur transparente
$couleur_transparente_coin = imagecolorallocate($image_coin, 255, 255, 255); // pour le moment la couleur est blanche
// On rend la couleur blanche transparente
imagecolortransparent($image_coin, $couleur_transparente_coin);
// On créer un cercle plein de rayon $rayon_arrondi, de position -2, -2 et de couleur $couleur_transparente_coin
imagefilledellipse($image_coin,$rayon_arrondi-$largeur_coin,0, $rayon_arrondi, $rayon_arrondi, $couleur_transparente_coin);
// On copie l'image $image_coin sur l'image principal $image
imagecopy($image_create, $image_coin, 0, $taille[1]-$largeur_coin, 0, 0, $largeur_coin, $hauteur_coin);
// On detruit l'image du coin
imagedestroy($image_coin);

// ********* Coin Bas Droit ********/
// On créer une image vide nomé $image_coin de couleur $couleur_fond et de taille $rayon_arrondi
$image_coin = imagecreate($largeur_coin, $hauteur_coin);
// On attribu une couleur (noir transparent, normallement sa n'existe pas souvent) au fond
$couleur_fond_coin = imagecolorallocatealpha($image_coin, 0, 0, 0, 0);
// On attribu une couleur transparente
$couleur_transparente_coin = imagecolorallocate($image_coin, 255, 255, 255); // pour le moment la couleur est blanche
// On rend la couleur blanche transparente
imagecolortransparent($image_coin, $couleur_transparente_coin);
// On créer un cercle plein de rayon $rayon_arrondi, de position -2, -2 et de couleur $couleur_transparente_coin
imagefilledellipse($image_coin,0,0, $rayon_arrondi, $rayon_arrondi, $couleur_transparente_coin);
// On copie l'image $image_coin sur l'image principal $image
imagecopy($image_create, $image_coin, $taille[0]-$largeur_coin, $taille[1]-$hauteur_coin, 0, 0, $largeur_coin, $hauteur_coin);
// On detruit l'image du coin
imagedestroy($image_coin);

// ********* Coin Haut Gauche ********/
// On créer une image vide nomé $image_coin de couleur $couleur_fond et de taille $rayon_arrondi
$image_coin = imagecreate($largeur_coin, $hauteur_coin);
// On attribu une couleur (noir transparent, normallement sa n'existe pas souvent) au fond
$couleur_fond_coin = imagecolorallocatealpha($image_coin, 0, 0, 0, 0);
// On attribu une couleur transparente
$couleur_transparente_coin = imagecolorallocate($image_coin, 255, 255, 255); // pour le moment la couleur est blanche
// On rend la couleur blanche transparente
imagecolortransparent($image_coin, $couleur_transparente_coin);
// On créer un cercle plein de rayon $rayon_arrondi, de position -2, -2 et de couleur $couleur_transparente_coin
imagefilledellipse($image_coin,$rayon_arrondi-$hauteur_coin,$rayon_arrondi-$largeur_coin, $rayon_arrondi, $rayon_arrondi, $couleur_transparente_coin);
// On copie l'image $image_coin sur l'image principal $image
imagecopy($image_create, $image_coin, 0, 0, 0, 0, $largeur_coin, $hauteur_coin);
// On detruit l'image du coin
imagedestroy($image_coin);

// ********* Coin Haut droit ********/
// On créer une image vide nomé $image_coin de couleur $couleur_fond et de taille $rayon_arrondi
$image_coin = imagecreate($largeur_coin, $hauteur_coin);
// On attribu une couleur (noir transparent, normallement sa n'existe pas souvent) au fond
$couleur_fond_coin = imagecolorallocatealpha($image_coin, 0, 0, 0, 0);
// On attribu une couleur transparente
$couleur_transparente_coin = imagecolorallocate($image_coin, 255, 255, 255); // pour le moment la couleur est blanche
// On rend la couleur blanche transparente
imagecolortransparent($image_coin, $couleur_transparente_coin);
// On créer un cercle plein de rayon $rayon_arrondi, de position -2, -2 et de couleur $couleur_transparente_coin
imagefilledellipse($image_coin,0,$rayon_arrondi-$largeur_coin, $rayon_arrondi, $rayon_arrondi, $couleur_transparente_coin);
// On copie l'image $image_coin sur l'image principal $image
imagecopymerge($image_create, $image_coin, $taille[0]-$largeur_coin, 0, 0, 0, $largeur_coin, $hauteur_coin,100 );
// On detruit l'image du coin
imagedestroy($image_coin);

// On rend la couleur noir transparent, transparente ...
$couleur_a_rendre_transparente = imagecolorallocatealpha($image_create, 0, 0, 0, 0);
imagecolortransparent($image_create, $couleur_a_rendre_transparente);

// On enregistre l'image png de la photo et des coins arrondis
imagepng($image_create,$image);

// On detruit l'image créer
imagedestroy($image_create);
}

// On appelle la fonction !!!
diaporama("20000000", "images_diaporama", 263, 56, 30, 10);
?>

</html>
crazygogo
Messages postés
135
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2009
-
ah... il a pas pris les tabulations... dommage pour la présentation...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.