echantillionage photo

ViPHP
AB
ViPHP | 5818 Messages

14 avr. 2010, 20:07

img src="mini.php?f=' , $data['image'] , '"
C'est quoi ce bin's ? tu trouves que ça ressemble à l'adresse d'une image ?

Eléphant du PHP | 388 Messages

14 avr. 2010, 20:13

Donc j'ai esayer cela
<?php echo '<td><a href="mini.php?f=' , $data['image'] , '"><img src="php/'.$data['image'].'" alt="Image" /></a></td>'; ?>
Les images appairaissent bien mais taille réel :(

du coup le fichier mini.php n'est pas prit en compte

ViPHP
AB
ViPHP | 5818 Messages

14 avr. 2010, 20:24

Tes miniatures doivent être enregistrées dans un dossier nommé par exemple "vignette".
Donc pour y accéder tu dois avoir un code du style
<img src="vignette/<?php echo $data['image']?>" alt = "..." />

Eléphant du PHP | 388 Messages

14 avr. 2010, 20:36

ben justement mes miniature ne sont pas enregistré c'est le script mini.php qui miniaturise les images.
a chaque affichage elle sont miniaturisé a la volet

c'est pour cela que en src cela pointer vers le fichier mini.php

ViPHP
AB
ViPHP | 5818 Messages

14 avr. 2010, 20:49

ben justement mes miniature ne sont pas enregistré c'est le script mini.php qui miniaturise les images.
a chaque affichage elle sont miniaturisé a la volet
C'est pas la bonne méthode, loin de là !
1/ Quand un visiteur télécharge une image sur le serveur il faut créer un vignette et éventuellement un agrandissement qui seront enregistrées chacune dans un dossier spécifique.

Le redimensionnement est un processus lourd qui ne doit pas être fait à chaque affichage de la page !

Au pire ça serait mieux de redimensionner tes images en htm mais la solution 1/ est celle la plus optimisée.

Eléphant du PHP | 388 Messages

14 avr. 2010, 20:50

aprés réflexion la meilleur solutions je pence c'est quand meme la création de miniature cela sera plus simple a traiter pour la suite .
Je me penche sur imagecopyresized et je reviens poster des que j'ai pondu un code ;) merci de ton aide

Eléphant du PHP | 388 Messages

15 avr. 2010, 18:32

Donc j'ai essayer de faire pour tester un form tout simple avec creation de miniature dans un dossier nommé mini et de mettre l'image taille reelle dans une dossier pics.
Le problème cela me donne rien du tout meme pas de message d'erreur rien et l'image se place pas dans les dossiers désirez pas d'upload je vois pas se qui peut bloquer.

Voici le fichier de transfert.
<form id="ok" method="post" action="photo.php"enctype="multipart/form-data">
		<label for="icone">Photo:</label><br />
		<input type="file" name="monimage" />
		<input type="submit" name="go" value="envoyer" />
		
</form>
et voici le fichier qui traite l'information
<?php
$dir = '../pics';
$dir_mini = '../mini';
$ratio = 150;

if (isset($_POST['go'])) {
	
	if (empty($_FILES['mon_image']['tmp_name'])) {
		
		$erreur = 'Aucun fichier envoyé.';
	}
	else {
		
		$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
		if ($tableau == FALSE) {
			
			unlink($_FILES['mon_image']['tmp_name']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}
		else {
			
			if ($tableau[2] == 2) {
				
				if (is_file('../pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];

				
				copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);
				
				if ($tableau[2] == 2) {
					
					$src = imagecreatefromjpeg($dir.'/'.$file_upload);
					
					if ($tableau[0] > $tableau[1]) {
						$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
						imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
					}
					else {
						$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
						imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
					}
					
					imagejpeg ($im, $dir_mini.'/'.$file_upload);
				}
				
				
				header('location: index.php');
				exit();
			}
			else {
				
				unlink($_FILES['mon_image']['tmp_name']);
				$erreur = 'Votre image est d\'un format non supporté.';
			}
		}
	}
}
?>
Merci de votre aide se serai un grand avancement, merci de m'aiguillé

ViPHP
AB
ViPHP | 5818 Messages

15 avr. 2010, 19:51

IL y a un tuto rapide vers la fin de cette page et un autre plus complet ici

Eléphant du PHP | 388 Messages

15 avr. 2010, 20:42

javais déja vu le tuto complet mais se que je ne comprend pas c'est que je souhaiterai stoquer les images miniatures dans un dossier miniature et je ne voit pas du tout ou il stoque, et je ne voit pas non plus ou il stoque les image taille réel.
Car par la suite je lancerai l'enregistrement du liens des images dans ma table
<?php
if (!empty($_POST['InsererNews']))
{
        $ListeExtension = array('jpg' => 'image/jpeg', 'jpeg'=>'image/jpeg');
        $ListeExtensionIE = array('jpg' => 'image/pjpeg', 'jpeg'=>'image/pjpeg');
        if (!empty($_POST['TitreNews']) && (!empty($_FILES['ImageNews'])) && (!empty($_POST['ContenuNews'])))
        {
                $TitreNews = $_POST['TitreNews'];
                $ContenuNews = $_POST['ContenuNews'];
 
                if ($_FILES['ImageNews']['error'] <= 0)
                {
                        if ($_FILES['ImageNews']['size'] <= 2097152)
                        {
                            $ImageNews = $_FILES['ImageNews']['name'];
 
                            $ExtensionPresumee = explode('.', $ImageNews);
                            $ExtensionPresumee = strtolower($ExtensionPresumee[count($ExtensionPresumee)-1]);
                            if ($ExtensionPresumee == 'jpg' || $ExtensionPresumee == 'jpeg')
                            {
                              $ImageNews = getimagesize($_FILES['ImageNews']['tmp_name']);
                              if($ImageNews['mime'] == $ListeExtension[$ExtensionPresumee]  || $ImageNews['mime'] == $ListeExtensionIE[$ExtensionPresumee])
{
 
                                              $ImageChoisie = imagecreatefromjpeg($_FILES['ImageNews']['tmp_name']);
                                              $TailleImageChoisie = getimagesize($_FILES['ImageNews']['tmp_name']);
                                              $NouvelleLargeur = 350; //Largeur choisie à 350px mais modifiable
 
                                              $Reduction = ( ($NouvelleLargeur * 100)/$TailleImageChoisie[0] );
                                              $NouvelleHauteur = ( ($TailleImageChoisie[1] * $Reduction)/100 );
 
                                              $NouvelleImage = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");
 
                                              imagecopyresampled($NouvelleImage , $ImageChoisie  , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $TailleImageChoisie[0],$TailleImageChoisie[1]);
                                              imagedestroy($ImageChoisie);
                                              $NomImageChoisie = explode('.', $ImageNews);
                                              $NomImageExploitable = time();
                                              
                                              imagejpeg($NouvelleImage , 'imagesnews/'.$NomImageExploitable.'.'.$ExtensionPresumee, 100);
                                              $LienImageNews = 'imagesnews/'.$NomImageExploitable.'.'.$ExtensionPresumee;
 
                                              $sql= 'INSERT INTO votre_table VALUES ("", "'.$TitreNews.'", "'.$ContenuNews.'", "'.$LienImageNews.'", "'.time().'")';
                                              $res = mysql_query($sql) or die(mysql_error());
                                              if ($res)
                                              {
                                                      echo 'La news a bien été insérée';
                                              }
                                        }
                                        else
                                        {
                                                echo 'Le type MIME de l\'image n\'est pas bon';
                                        }
                                }
                                else
                                {
                                        echo 'L\'extension choisie pour l\'image est incorrecte';
                                }
                        }
                        else
                        {
                                echo 'L\'image est trop lourde';
                        }
                }
                else
                {
                        echo 'erreur lors de l\'upload image';
                }
        }
        else
        {
                echo 'Au moins un des champs est vide';
        }
}
?>

peut tu m'aider je souhaiterai rajouter ceci

$dir = '../pics';
$dir_mini = '../mini';
puis aprés je ne voit pas comment l'utiliser dans le code

En tout cas merci pour ton aide

ViPHP
AB
ViPHP | 5818 Messages

15 avr. 2010, 23:23

Une chose à savoir : dans ton code précédent (l'avant dernier) est indiqué des chemins de dossier en dur :
$dir = '../pics';
$dir_mini = '../mini';
Or il te faut indiquer l'adresse réelle du chemin de ton site par rapport au serveur et celle de ton dossier.

Pour connaitre l'adresse réelle de ton site tu peux faire :

$real = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;

//Et si tu veux poster ton image dans un dossier nommé 'pics' situé à la racine de ton site ce sera donc

$dir = $real.'pics';
Pareil pour $dir_mini

Eléphant du PHP | 388 Messages

16 avr. 2010, 07:27

donc j'ai suivi ton conseil je te remercie mais cela ne fonctionne toujours pas voici le code total
<?php
$real = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;

//Et si tu veux poster ton image dans un dossier nommé 'pics' situé à la racine de ton site ce sera donc

$dir = $real.'pics';
$dir_mini = $real.'mini';

$ratio = 150;

if (isset($_POST['go'])) {
	
	if (empty($_FILES['mon_image']['tmp_name'])) {
		
		$erreur = 'Aucun fichier envoyé.';
	}
	else {
		
		$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
		if ($tableau == FALSE) {
			
			unlink($_FILES['mon_image']['tmp_name']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}
		else {
			
			if ($tableau[2] == 2) {
				
				if (is_file('../pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];

				
				copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);
				
				if ($tableau[2] == 2) {
					
					$src = imagecreatefromjpeg($dir.'/'.$file_upload);
					
					if ($tableau[0] > $tableau[1]) {
						$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
						imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
					}
					else {
						$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
						imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
					}
					
					imagejpeg ($im, $dir_mini.'/'.$file_upload);
				}
				
				
				header('location: index.php');
				exit();
			}
			else {
				
				unlink($_FILES['mon_image']['tmp_name']);
				$erreur = 'Votre image est d\'un format non supporté.';
			}
		}
	}
}
?>

ViPHP
AB
ViPHP | 5818 Messages

16 avr. 2010, 16:08

Ben quand ça marche pas faut se mettre en mode debug...

Par exemple tu mets un echo 'condition 1 ok' juste après une condition pour voir si le code entre ou non dans la condition. Tu finiras bien par trouver l'origine du pb avec cette méthode. Fait aussi afficher tes variables pour voir ce qu'elles contiennent. Isoles certaines parties de ton code etc.

Eléphant du PHP | 388 Messages

18 avr. 2010, 08:02

mon problème est résolu c'était une faute de frappe dans le fichier index :D

Eléphant du PHP | 388 Messages

18 avr. 2010, 08:05

voici mon code complet de ma page de transfert.
<?php

print getcwd();

//dossier ou seront stocket les miniature et les images
$dir = getcwd()."/pics";
$dir_mini = getcwd()."/mini";

//taille des miniature
$ratio = 150;

//recuperation du post du formulaire
if (isset($_POST['go'])) {
// on teste si le champ permettant de soumettre un fichier est vide ou non
	if (empty($_FILES['mon_image']['tmp_name'])) {
		
		$erreur = 'Aucun fichier envoyé.';
	}
			else {
			
			
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier		
		$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
		if ($tableau == FALSE) {
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur 			
			unlink($_FILES['mon_image']['tmp_name']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}
		
		else {
			
			if ($tableau[2] == 2) {
				
				if (is_file('.pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];

// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille 				
				copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);
				
				if ($tableau[2] == 2) {
// on crée une image à partir de notre grande image à l'aide de la librairie GD 					
					$src = imagecreatefromjpeg($dir.'/'.$file_upload);
// on teste si notre image est de type paysage ou portrait 					
					if ($tableau[0] > $tableau[1]) {
						$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
						imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
					}
					else {
						$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
						imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
					}
 // on copie notre fichier généré dans le répertoire des miniatures 					
					imagejpeg ($im, $dir_mini.'/'.$file_upload);
				
			
				}
				
			

			}
			else {
// si notre image n'est pas de type jpeg				
				unlink($_FILES['mon_image']['tmp_name']);
				$erreur = 'Votre image est d\'un format non supporté.';
			}
		}
	}
}	


?>
maintenant je souhaiterai rajouter une condition si resultat = 1 soit le fichier transferer alors on copie les liens dans la table image mais je ne voit pas comment mettre cette condition

Eléphant du PHP | 388 Messages

18 avr. 2010, 08:19

donc j'ai fait cela
include ('connect.php');
			$nom = "{$_FILES['mon_image']['name']}";
			$image = $dir.$nom;
			$miniature = $dir_mini.$nom;
			$sql = "INSERT INTO images (image,miniature) VALUES ('$image','$miniature')";       
            $req = mysql_query($sql)or die(mysql_error());

			}
mais dans ma base le liens passe bien mais cela mais exemple

/homez.316/aaa/www/galerietest/picsIMG_0015

alors que sa devrait mettre
/homez.316/aaa/www/galerietest/pics/IMG_0015