| Qui est en ligne ? |
| Il y a : 20 utilisateurs en ligne, consultez le détail |
Forum » Serveur, Réseaux et Programmation » Créer une galerie photo en php |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
| Page : [1] |
| Auteur | Message |
|---|---|
|
|
#0 Message posté le : 21-11-2006 à 23:20:33 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 16-01-2003 Nombre de messages : 242 |
Hello! J'aimerai créer une galerie photo pour un site. J'aimerai que le script puisse : 1. Récuperer les photos sur le disque dur de l'utilisateur et les uploader sur le ftp du site. 2. Inserer chaque nom d'image dans une base SQL 3. Créer une miniature de chaque image L'étape 1 ne doit pas poser de problème, la 2 non plus mais pour la 3 je ne sais pas si c'est possible. Si oui j'ai aucune idée de comment faire... Si quelqu'un a une idée...? ------------------------------------- |
|
|
#1 Message posté le : 21-11-2006 à 23:27:04 |
Hobbit Forum : Inscrit Association : Arrivé(e) le : 07-07-2003 Nombre de messages : 1722 |
Je ne saurais pas le faire, là tout de suite, mais je sais qu'il existe des bibliothèques PHP pour générer des miniatures... Un dev web dans la salle ? ------------------------------------- GANLHI http://ganlhi.jexiste.fr Linux User n°366208 "Pour gagner ce jeu, il faut une jolie boîte, une jolie copine, et le reste on s'en fout" |
|
|
#2 Message posté le : 22-11-2006 à 08:20:41 |
Hobbit Forum : Inscrit Association : Arrivé(e) le : 17-01-2004 Nombre de messages : 1727 |
sinon il y a un petit soft qui fait a peu pres ce que tu demandes : www.jalbum.net ------------------------------------- Linux user #377793 Petition Free IPv6 # 18366 |
|
|
#3 Message posté le : 22-11-2006 à 09:54:28 |
Jedi Forum : Modérateur Association : Membre fondateur Arrivé(e) le : 08-01-2005 Nombre de messages : 4030 |
Salut oui oui moi je suis un webdev. L'étape la plus difficile est en réalité la première. Faire des miniatures est plutôt aisé. J'ai déjà codé un tel truc. Je te passerai pas les sources car je suis en train de les refaire complètement ( après je les ouvrirai ------------------------------------- C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon - |
|
|
#4 Message posté le : 22-11-2006 à 10:11:21 |
Hobbit Forum : Inscrit Association : Arrivé(e) le : 17-10-2003 Nombre de messages : 1067 |
Pour les miniatures, il suffit de faire un tag img avec une taille et une hauteur plus petite . (dans un css par exemple en faisant un attribut miniature) .
<img src="/path/to/image" alt="MonImage" class="miniature"/>
et dans le css :
img.miniature
{
width = 40px;
height = 40px;
}
------------------------------------- If you don't know, ask manpage ! |
|
|
#5 Message posté le : 22-11-2006 à 10:17:40 |
Jedi Forum : Modérateur Association : Membre fondateur Arrivé(e) le : 08-01-2005 Nombre de messages : 4030 |
Salut Tamiel cette méthode n'est pas bonne pour faire des miniatures. En effet, le navigateur va charger l'image au complet, puis al redimensionner pour l'afficher. Du coup, la miniature sera aussi lourde à charger qu'un gros fond d'écran par exemple. Avec PHP, on peut générer automatiquement des fichiers de miniatures qui sont alors des fichiers image beaucoup plus petits. ------------------------------------- C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon - |
|
|
#6 Message posté le : 22-11-2006 à 11:01:39 |
Jedi Forum : Modérateur Association : Membre fondateur Arrivé(e) le : 08-01-2005 Nombre de messages : 4030 |
Alors allons y pour la miniature. Le principe le plus efficace est le suivant : tu te fais une fonction qui prend en argument le chemin de l'image et renvoie le chemin de la miniature. De cette manière, la miniature peut être créée automatiquement si elle n'existe pas et ne sera pas recréée si elle existe déjà ( économise le coût en calcul du serveur ). Pour les regénérer, il suffira de vider le répertoire temporaire. Voici une fonction dont je me servais, écrite en PHP4. Elle est basique car il n'y a pas de gestion des erreurs au cas ou les arguments ne sont pas viables ( fichier source inexistant par exemple ). Elle ne crée toutefois pas de miniature si l'image de départ est plus petite que les dimensions maximales précisées. De plus, les proportions sont conservées.
/* Cette fonction produit une miniature */
/* On peut chosiir le répertoire de stockage de la miniature */
function reduire_image($source,$largeurmax,$hauteurmax,$tmpdir="webdata/tmp/")
{
/* Recherche du nom de fichier */
$fichier=file($source);
/* Construction du chemin de la miniature */
$destination=$tmpdir.substr($fichier,0,strlen($fichier)-4)."-mini.png";
/* Si la miniature existe, on ne la recrée pas */
if(!(file_exists($destination)))
{
/* On obtient des infos sur l'image source */
$caracteristiques = getimagesize($source);
/* On vérifie que le fichier est trop grand */
if(($caracteristiques[1]>$hauteurmax)or($caracteristiques[0]>$largeurmax))
{
if($caracteristiques[2] == "1")
$depart = imagecreatefromgif($source);
if($caracteristiques[2] == "2")
$depart = imagecreatefromjpeg($source);
if($caracteristiques[2] == "3")
$depart = imagecreatefrompng($source);
/* On calcule la largeur et hauteur d'arrivée */
/* En conservant les proportions */
$h_i = $caracteristiques[1];
$w_i = $caracteristiques[0];
if($h_i >$hauteurmax)
{
$convert=$hauteurmax/$h_i;
$h_i=$hauteurmax;
$w_i=ceil($w_i*$convert);
}
if($w_i >$largeurmax)
{
$convert=$largeurmax/$w_i;
$w_i=$largeurmax;
$h_i=ceil($h_i*$convert);
}
/* On créée une image miniature vide */
$arrivee = imagecreatetruecolor($w_i,$h_i);
/* On la rempli avec l'autre redimensionnée */
imagecopyresampled($arrivee,$depart, 0, 0, 0, 0, $w_i,$h_i,$caracteristiques[0], $caracteristiques[1]);
/* On enregistre la miniature */
imagepng($arrivee,$destination);
}
/* Si le fichier est trop petit, on renvoie le chemin original */
else
$destination=$source;
}
return($destination);
}
Tu peux t'en inspirer, ou même t'en servir en rajoutant la gestion des erreurs. Pour l'upload, il y plusieurs manières : - Faire envoyer les fichiers un par un par l'utilisateur. - Lui faire envoyer une archive que PHP désarchive ensuite. Enfin, pour l'enregistrement du chemin de l'image dans la abse MySQL, prend bien garde de placer un test d'existence du fichier avant l'enregistrement dans MySQL. ça t'évitera des liens morts. N'hésite pas à poser des questions @+ Edit : pour bien faire, faudrait recoder tout ça à la PHP5, ce que je ferais un jour. --Message édité par jblecanard le 28-12-2006 à 12:28:43-- ------------------------------------- C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon - |
|
|
#7 Message posté le : 22-11-2006 à 13:24:48 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 16-01-2003 Nombre de messages : 242 |
whaou merci beaucoup!:) c'est exactement ce que je cherchais! Je vais essayer de mettre en place tout ca ces prochains jours. Et sinon impossible d'uploader directement un dossier avec les images qu'il contient...? sinon l'option de l'archive est bien aussi. Encore merci! ------------------------------------- |
|
|
#8 Message posté le : 22-11-2006 à 14:45:48 |
Jedi Forum : Modérateur Association : Membre fondateur Arrivé(e) le : 08-01-2005 Nombre de messages : 4030 |
Salut Non uploader directement un dossier n'est possible qu'avec une applet java, et je sais pas comment faire. C'est archive ou fichier par fichier. Tu pourrais faire qque chose qui détecte si c'est une arhcive ou une image avec l'extension, ce sera pratique d'utilisation. ------------------------------------- C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon - |
|
|
#9 Message posté le : 22-11-2006 à 23:54:54 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 16-01-2003 Nombre de messages : 242 |
Voila alors je viens de terminer le script. si ca interresse qqn: 1. on créé un dossier dans lequel on va uploader les photos 2. on upload les photos (j'ai réussi a uploader plusieurs photo d'une traite avec une boucle) 3. on créé un dossier dans lequel les miniatures vont etre placé, on créé les miniature.
<!-- Nom du repertoire qui va contenir les photos -->
<form method="POST" name="rep" action="insertimg.php?etape=2">
Nom du répertoire* :
<input type="text" name="repertoire" /><br /><input type="submit" value="ok" />
</form>
<?php
}
if ($etape == 2) //creation du repertoire
{
if (empty($dir))
$dir = $_POST['repertoire'];
if(is_dir("images/galeries/$dir")) //verifie si le rep existe deja
{
echo '<center>Erreur, ce répertoire existe déjà! Ne continuez que si vous voulez ajouter des photos à cet événement!</center>';
}
else //s'il n'existe pas
{
mkdir('images/galeries/'.$dir, 0777); //Creer le rep avec droits
if(is_dir("images/galeries/$dir"))
echo '<center>Répertoire créer avec succès</center>';
else
echo '<center>Problème lors de la création du répertoire!</center>';
}
?>
<!-- Recherche des images sur le disque de l'utilisateur -->
<form method="POST" enctype="multipart/form-data" action="insertimg.php?etape=3&dir=<?echo $dir;?>">
Photos :<br />
<input type="file" name="1" /><br />
<input type="file" name="2" /><br />
<input type="file" name="3" /><br />
<input type="file" name="4" /><br />
<input type="file" name="5" /><br />
<input type="file" name="6" /><br />
<input type="file" name="7" /><br />
<input type="file" name="8" /><br />
<input type="file" name="9" /><br />
<input type="file" name="10" /><br />
<br /><input type="submit" name="upload" value="ok" />
</form>
<?php
}
if ($etape == 3)
{
if( isset($_POST['upload']) ) // si formulaire soumis
{
$i = 1;
while ($a = $i)
{
$content_dir = 'images/galeries/'.$dir.'/'; // dossier creer precedemment où sera déplacé le fichier
$tmp_file = $_FILES[$i]['tmp_name'];
if( !is_uploaded_file($tmp_file) )
{
exit("<center>Fin du transfert.<br />
<a href=\"insertimg.php?etape=2&dir=$dir\">Continuer à transférer des photos pour $dir.</a><br />
<a href=\"insertimg.php?etape=4&dir1=$dir\">Prochaine étape.</a></center>");
}
// on vérifie maintenant l'extension
$type_file = $_FILES[$i]['type'];
if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png') )
{
exit("Le fichier n'est pas une image");
}
// on copie le fichier dans le dossier de destination
$name_file = $_FILES[$i]['name'];
if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
echo '<center>L\'image '.$_FILES[$i]['name'].' a bien été transférée! <br /></center>';
$i++;
}
}
}
if ($etape == 4)
{
if (!is_dir('images/galeries/'.$dir1.'/mini'))
{
mkdir('images/galeries/'.$dir1.'/mini', 0777);
}
if (is_dir('images/galeries/'.$dir1.'/mini'))
echo '<center>(Répertoire miniature crée.)</center>';
function reduire_image($source,$largeurmax,$hauteurmax,$tmpdir)
{
$a=strlen($source)-1;
while(substr($source,$a,1)<>"/")
$a=$a-1;
$fichier=substr($source,$a+1);
$destination=$tmpdir.substr($fichier,0,strlen($fichier)-4)."-mini.png";
if(!(file_exists($destination)))
{
$caracteristiques = getimagesize($source);
if(($caracteristiques[1]>$hauteurmax)or($caracteristiques[0]>$largeurmax))
{
if($caracteristiques[2] == "1")
$depart = imagecreatefromgif($source);
if($caracteristiques[2] == "2")
$depart = imagecreatefromjpeg($source);
if($caracteristiques[2] == "3")
$depart = imagecreatefrompng($source);
$h_i = $caracteristiques[1];
$w_i = $caracteristiques[0];
if($h_i >$hauteurmax)
{
$convert=$hauteurmax/$h_i;
$h_i=$hauteurmax;
$w_i=ceil($w_i*$convert);
}
if($w_i >$largeurmax)
{
$convert=$largeurmax/$w_i;
$w_i=$largeurmax;
$h_i=ceil($h_i*$convert);
}
$arrivee = imagecreatetruecolor($w_i,$h_i);
imagecopyresampled($arrivee,$depart, 0, 0, 0, 0, $w_i,$h_i,$caracteristiques[0], $caracteristiques[1]);
imagepng($arrivee,$destination);
}
else
$destination=$source;
}
return($destination);
}
$curdir = "images/galeries/$dir1/";
$dir = opendir($curdir);
// on scanne le répertoire
while($p=readdir($dir)) {
// si c'est un fichier
if(is_file($curdir."/".$p)) {
// si c'est une extension d'image
$ext = strtolower(substr($p, strrpos($p, '.') + 1));
if( ($ext=="jpg") || ($ext=="jpeg")
|| ($ext=="gif")
|| ($ext=="bmp")
|| ($ext=="png")) {
// lien vers l'image
echo $p.'<br>';
reduire_image('images/galeries/'.$dir1.'/'.$p,'200','200','images/galeries/'.$dir1.'/mini/');
}
}
}
}Voila en tout cas le script marche, le code peut surement etre plus simple mais je n'ai pas trop fait attention a ca pour l'instant. --Message édité par ovni le 22-11-2006 à 23:58:51-- ------------------------------------- |
|
|
#10 Message posté le : 09-12-2006 à 10:43:25 |
Petit scarabée Forum : Inscrit Association : Arrivé(e) le : 09-12-2006 Nombre de messages : 3 |
Bonjour tu as essayé avec PhpWebGallery : http://www.phpwebgallery.net/fre/index.html |
|
|
#11 Message posté le : 11-12-2006 à 03:19:49 |
Petit scarabée Forum : Inscrit Association : Arrivé(e) le : 11-12-2006 Nombre de messages : 1 |
Bon, j'ai repris ce petit code (merci beaucoup a tous pour votre post enrichissant) et je vous file ma version adaptée a mes besoins et perfectionnée (un peu). Le bug de l'ancienne version était que si tu mettait une photo dans le form file 2 et pas dans le 1er, ca n'uploadait quand meme pas la seconde. C'est pourquoi j'ai remplacé la boucle while par la for($i=1, $i!= 6, $i++) et rajouté des variables pour controler le nombre de formulaires affichés. Bref, le code est hyper bordélique mais je m'efforce de jour en jour a aérer, a laisser respirer les caractères... <?php
session_start();
// Nombre de photos souhaitée
$nmbre_photo = 15;
?>
<!-- Recherche des images sur le disque de l'utilisateur -->
<form method="POST" enctype="multipart/form-data" action="">
Photos :<br />
<?
for ($nmbre_form = 1; $nmbre_form != $nmbre_photo + 1; $nmbre_form++) {
//debut boucle de création de formulaire
?>
<input type="file" name="<? echo $nmbre_form; ?>" /><br />
<?
}
// fin boucle de création de formulaire
?>
<br /><input type="submit" name="upload" value="Télécharger ces photos" />
</form>
<?
if( isset($_POST['upload']) ) // si formulaire soumis (le formulaire est en dessous
{
for ($i=1; $i != $nmbre_photo + 1; $i++)
{
$content_dir = "test/"; // dossier où sera déplacé le fichier
$fichier_temporaire_sur_serveur = $_FILES[$i]['tmp_name'];
if( is_uploaded_file($fichier_temporaire_sur_serveur) )
{
// on vérifie maintenant l'extension
$format_fichier = $_FILES[$i]['type'];
if( !strstr($format_fichier, 'jpg') && !strstr($format_fichier, 'jpeg') && !strstr($format_fichier, 'bmp') && !strstr($format_fichier, 'gif') && !strstr($format_fichier, 'png') )
{
exit("<br />Le fichier ".$_FILES[$i]['name']." n'est pas un format de photo supporté par annonces de la mer. Veuillez convertir votre photo au format .jpg, .png ou .gif");
}
// on assigne une extension
if ($format_fichier == "image/jpeg") { $extention = ".jpeg"; }
if ($format_fichier == "image/jpg") { $extention = ".jpg"; }
if ($format_fichier == "image/png") { $extention = ".png"; }
if ($format_fichier == "image/bmp") { $extention = ".bmp"; }
if ($format_fichier == "image/gif") { $extention = ".gif"; }
//On prépare le nom de fichier avec le timestamp actuel
$timestamp = time();
$nom_fichier = $timestamp."-".$i.$extention; // Je rajoute le -$i parce que sinon ca réécrit sur l'image uploadé précédemment dans la boucle : le timestamp reste le même puisque le script est exécuté en un millième de seconde.
//On bouge le fichier temporaire dans le dossier correspondant
if( !move_uploaded_file($fichier_temporaire_sur_serveur, $content_dir . $nom_fichier) )
{
exit("Impossible de copier le fichier dans $content_dir");
} -+
// On refout le dossier en chmod 0755 (pour les serveurs pas sympa comme le mien)
chmod ($content_dir.$nom_fichier, 0755);
//Là, je stocke le nom de la photo (celle qui est enregistrée sur le serveur avec le timestamp)
//sur une variable en session pour pouvoir l'utiliser a ma guise dans les pages d'après (attention a la sécurité quand même), un pingouin reste un pingouin, mais le loup rôde.
$_SESSION["photo".$i] = "$nom_fichier";
echo '<center>L\'image '.$_FILES[$i]['name'].' a bien été transférée! <br /></center>';
echo $_SESSION["photo".$i];
} // fin if is uploaded file
} //fin boucle for
if( !is_uploaded_file($fichier_temporaire_sur_serveur) )
{
exit("<center>Fin du transfert.<br />
<a href=\"insertimg.php?etape=2\">Continuer à transférer des photos pour $dir.</a><br />
<a href=\"insertimg.php?etape=4\">Prochaine étape.</a></center>");
}
}
?>
Joyeux noel bientot |
| Page : [1] |
Forum » Serveur, Réseaux et Programmation » Créer une galerie photo en php |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
- Petit scarabée : 0 pastille, moins de 100 messages
- Scarabée : 0 pastille, plus de 100 messages
- Hobbit : 1 pastille, plus de 1000 messages
- Naboo : 2 pastilles, plus de 2000 messages
- Elfe : 3 pastilles, plus de 3000 messages
- Jedi : 4 pastilles, plus de 4000 messages
- Maître Jedi : 5 pastilles, plus de 5000 messages