IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[GD] Amélioration d'une fonction upload


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    Par défaut [GD] Amélioration d'une fonction upload
    Bonjour chers amis,

    J'ai besoin de votre aide. Je n'en peux plus de cette fonction ci-après présentée. Elle me sert à uploader 3 images pour un site de news.
    Clairement, un formulaire propose le téléchargement d'une image.

    La fonction est censé pondre 3 images à partir de ce fichier :

    - Si dans le formulaire la case slider est cochée, elle pond une première image de 1423*600 si elle n'est pas cochée une image de 620*380.
    - Ensuite elle pond une petite image de 300*295
    - et de 120*100.

    A l'heure actuelle, les images sont au bon format mais tout est ratatiné ou décalé etc... Je voudrais que la fonction redimensionne l'image fourni sur la largeur si l'image est en mode paysage, sur la hauteur si elle est en mode portrait. Ensuite qu'elle l'a rogne pour la mettre aux bonnes dimensions.

    Pourriez-vous m'aider à optimiser cette fonction afin que j'obtienne ce que je veux ? Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    <?php
    function upload($maxsize, $photo)
    {
    $compte_erreur=0;
    $extensions_valides = array('jpg', 'png', 'jpeg');
    // $nom_image = md5(uniqid(rand(), true)); 
    $nom_image = $_FILES[$photo]['name']; 
    if (is_file('../images/temp/'.$_FILES[$photo]['name'])) // On vérifie que le nom n'existe pas dans le répertoire
    {
    	$nom_image = '_'.$_FILES[$photo]['name']; // S'il existe déjà on lui attribue un préfixe pour le différencier
    }
     
    	// On contrôle que le fichier a bien été uploadé.
    	if ($_FILES[$photo]['error'] > 0) 
    	{
    		$message = 'Erreur lors du transfert du fichier';	
    		$compte_erreur++;
    		// On contrôle si l'erreur vient de la taille du fichier uploadé.
    		if ($_FILES[$photo]['size'] > $maxsize) 
    		{
    			$message = 'Le fichier est trop gros';
    			$compte_erreur++;
    		}
    	}
    	else // Si le transfert a réussi
    	{	
    		// On récupère l'extension du fichier pour comparaison
    		$extension_upload = strtolower(substr(strrchr($_FILES[$photo]['name'], '.'),1)); 	
    		// On compare l'extension récupérée avec les extensions de notre array et si le fichier est valide:	
    		if (in_array($extension_upload,$extensions_valides))
    		{
    			// On récupère la taille de l'image uploadée.
    			$image_sizes = getimagesize($_FILES[$photo]['tmp_name']);
    			$parcours= "../images/temp/$nom_image";
    			$transfert= move_uploaded_file($_FILES[$photo]['tmp_name'],$parcours); // Image originale
    			if ($transfert)
    			{
    				if ($slider=='1') // Création d'une image pour le slider 1423*600
    				{
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$slider= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$slider= imagecreatefrompng($parcours);
    					}
    					$largeur_origine= $image_sizes[0];
    					$hauteur_origine= $image_sizes[1];
    					$largeur_slider= 1423;
    					$hauteur_slider= 600;
    					$copie_slider = imagecreatetruecolor(1423, $hauteur_slider);
    					$nom_slider_image='slider_'.$nom_image;
    					imagecopyresampled($copie_slider, $slider, 0,0,0,0, $largeur_slider, $hauteur_slider, $largeur_origine, $hauteur_origine);
    					imagejpeg($copie_slider, "../images/temp/$nom_slider_image",100);
    				}
    				else // Création d'une grande image 620*380
    				{
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$slider= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$slider= imagecreatefrompng($parcours);
    					}
    					$largeur_origine= $image_sizes[0];
    					$hauteur_origine= $image_sizes[1];
    					$largeur_slider= 620;
    					$coeff= 620 / $largeur_origine;
    					$hauteur_temp= $hauteur_origine*$coeff;
    					$copie_slider = imagecreatetruecolor(620, $hauteur_temp);
    					$nom_slider_image='gde_'.$nom_image;
    					imagecopyresampled($copie_slider, $slider, 0,0,0,0, $largeur_slider, $hauteur_temp, $largeur_origine, $hauteur_origine);
    					//imagecopy($copie_slider , $slider ,0 ,0 , 0, 0, $largeur_slider , $hauteur_slider);
    					//imagecopyresampled($copie_slider, $slider, 0,0,0,0, $largeur_slider, $hauteur_slider, $largeur_origine, $hauteur_origine);
    					imagejpeg($copie_slider, "../images/temp/$nom_slider_image",100);
    				}
     
    				// création d'une image aux bonnes dimensions. 300*295
    				if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    				{
    					$nouvelle_image= imagecreatefromjpeg($parcours);
    				}
    				else
    				{
    					$nouvelle_image= imagecreatefrompng($parcours);
    				}
    				$copie_new_image = imagecreatetruecolor(300, 295);
    				$largeur_source1= $image_sizes[0];
    				$hauteur_source1= $image_sizes[1];
    				$largeur_destination= 300;
    				$hauteur_destination= 295;
    				$nom_pt_image='pt_'.$nom_image;
    				imagecopyresampled($copie_new_image, $nouvelle_image, 0,0,0,0, $largeur_destination, $hauteur_destination, $largeur_source1, $hauteur_source1);
    				imagejpeg($copie_new_image, "../images/temp/$nom_pt_image",100);
     
    				// Création de la miniature
    				if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    				{
    					$source= imagecreatefromjpeg($parcours);
    				}
    				else
    				{
    					$source= imagecreatefrompng($parcours);
    				}
    				$destination1= imagecreatetruecolor(120, 100);
    				$largeur_source= $image_sizes[0];
    				$hauteur_source= $image_sizes[1];
    				$largeur_destination1= 120;
    				$hauteur_destination1= 100;
    				$nom_miniature='thumb_'.$nom_image;
    				imagecopyresampled($destination1, $source, 0,0,0,0, $largeur_destination1, $hauteur_destination1, $largeur_source, $hauteur_source);
    				imagejpeg($destination1, "../images/temp/$nom_miniature",100);
     
    				$fichier_sup1= '../images/temp/'.$nom_image;
    				unlink("$fichier_sup1");
    			}
    			else
    			{
    				$message= 'Echec du transfert';
    				$compte_erreur++;
    			}
    		}
    		else // Si le fichier uploadé n'a pas une extension souhaité:
    		{		
    			$message= 'Le format du fichier uploadé n\'est pas correct';
    			$compte_erreur++;
    		}	
    	}
    $retour= array();
    $retour['message']= $message;
    $retour['compte_erreur']= $compte_erreur;
    $retour['nom_pt_image']= $nom_pt_image;
    $retour['nom_miniature']= $nom_miniature;
    $retour['nom_slider']= $nom_slider_image;
    return $retour;
    }

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    J'ai trouvé ceci : http://j-reaux.developpez.com/tutori...nner-image/#L5
    et donc essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <?php
    function upload($maxsize, $slider, $photo)
    {
    $compte_erreur=0;
    $extensions_valides = array('jpg', 'png', 'jpeg');
    // $nom_image = md5(uniqid(rand(), true)); 
    $nom_image = $_FILES[$photo]['name']; 
    if (is_file('../images/temp/'.$_FILES[$photo]['name'])) // On vérifie que le nom n'existe pas dans le répertoire
    {
    	$nom_image = '_'.$_FILES[$photo]['name']; // S'il existe déjà on lui attribue un préfixe pour le différencier
    }
     
    	// On contrôle que le fichier a bien été uploadé.
    	if ($_FILES[$photo]['error'] > 0) 
    	{
    		$message = 'Erreur lors du transfert du fichier';	
    		$compte_erreur++;
    		// On contrôle si l'erreur vient de la taille du fichier uploadé.
    		if ($_FILES[$photo]['size'] > $maxsize) 
    		{
    			$message = 'Le fichier est trop gros';
    			$compte_erreur++;
    		}
    	}
    	else // Si le transfert a réussi
    	{	
    		// On récupère l'extension du fichier pour comparaison
    		$extension_upload = strtolower(substr(strrchr($_FILES[$photo]['name'], '.'),1)); 	
    		// On compare l'extension récupérée avec les extensions de notre array et si le fichier est valide:	
    		if (in_array($extension_upload,$extensions_valides))
    		{
    			// On récupère la taille de l'image uploadée.
    			$image_sizes = getimagesize($_FILES[$photo]['tmp_name']);
    			$parcours= "../images/temp/$nom_image";
    			$transfert= move_uploaded_file($_FILES[$photo]['tmp_name'],$parcours); // Image originale
    			if ($transfert)
    			{
    				//include_once 'fonctions.php';
    				if ($slider=='1') // Création d'une image pour le slider 1423*600
    				{
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$slider_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$slider_temp= imagecreatefrompng($parcours);
    					}
    					$nom_slider_image='slider_'.$nom_image;
    					$image_slider = fctcropimage(1600,600,'$parcours','$nom_slider_image','$parcours','$nom_image');
    					imagejpeg($image_slider, "../images/temp/$nom_slider_image",100);
    				}
    				else // Création d'une grande image 620*380
    				{
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$slider_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$slider_temp= imagecreatefrompng($parcours);
    					}
    					$nom_slider_image='slider_'.$nom_image;
    					$image_slider = fctcropimage(620,380,'$parcours','$nom_slider_image','$parcours','$nom_image');
    					imagejpeg($image_slider, "../images/temp/$nom_slider_image",100);
    				}
     
    				// création d'une autre image. 300*295
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$pt_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$pt_temp= imagecreatefrompng($parcours);
    					}
     
    					$nom_pt_image='pt_'.$nom_image;
    					$pt_image = fctcropimage(300,295,'$parcours','$nom_pt_image','$parcours','$nom_image');
    					imagejpeg($pt_image, "../images/temp/$nom_pt_image",100);
     
    				// Création de la miniature
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$thumb_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$thumb_temp= imagecreatefrompng($parcours);
    					}
     
    					$nom_thumb_image='thumb_'.$nom_image;
    					$thumb_image = fctcropimage(120,100,'$parcours','$nom_thumb_image','$parcours','$nom_image');
    					imagejpeg($thumb_image, "../images/temp/$nom_thumb_image",100);
     
    				$fichier_sup1= '../images/temp/'.$nom_image;
    				unlink("$fichier_sup1");
    			}
    			else
    			{
    				$message= 'Echec du transfert';
    				$compte_erreur++;
    			}
    		}
    		else // Si le fichier uploadé n'a pas une extension souhaité:
    		{		
    			$message= 'Le format du fichier uploadé n\'est pas correct.';
    			$compte_erreur++;
    		}	
    	}
    $retour= array();
    $retour['message']= $message;
    $retour['compte_erreur']= $compte_erreur;
    $retour['nom_pt_image']= $nom_pt_image;
    $retour['nom_thumb_image']= $nom_thumb_image;
    $retour['nom_slider_image']= $nom_slider_image;
    return $retour;
    }
    Mais ça ne fonctionne pas.

    Help me please !!!!

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    "Ca ne fonctionne pas" n'est pas un message d'erreur...


    On peut trouver un exemple d'utilisation de la fonction cropimage() :


    Et aussi :


  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    On ne met pas de guillemets autour d'une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $thumb_image = fctcropimage(120,100,$parcours,$nom_thumb_image,$parcours,$nom_image);
    de plus le 3ème paramètre est le répertoire de l'image source et le 5ème le répertoire de destination. ta variable $parcours contient le nom du fichier, ça ne va pas.
    D'ailleurs mets le repertoire en variable au lieu de le réecrire partout dans la fonction.

    Pour finir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imagejpeg($image_slider, "../images/temp/$nom_slider_image",100);
    A quoi sert cette ligne ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Invité
    Invité(e)
    Par défaut
    +1 pour sabotage
    Je n'avais pas vu les guillemets simples...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Faut que tu ajoutes des retours d'erreurs dans ta fonction
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Invité
    Invité(e)
    Par défaut
    L'update du tuto et des fonctions est en cours...
    Avec ajout de fonctions supplémentaires !

    N.B. La gestion d'erreur se fait AVANT : voir "Traitement Photo" (dans mon message précédent).

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    "Ca ne fonctionne pas" n'est pas un message d'erreur...
    En effet, désolé. En fait la fonction ne fait rien. Aucune image téléchargée. Aucun message d'erreur.

    Maintenant, avec les guillements en moins ça risque de mieux fonctionner lol

    Citation Envoyé par sabotage Voir le message
    On ne met pas de guillemets autour d'une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $thumb_image = fctcropimage(120,100,$parcours,$nom_thumb_image,$parcours,$nom_image);
    Désolé...

    Citation Envoyé par sabotage Voir le message
    de plus le 3ème paramètre est le répertoire de l'image source et le 5ème le répertoire de destination. ta variable $parcours contient le nom du fichier, ça ne va pas.
    D'ailleurs mets le repertoire en variable au lieu de le réecrire partout dans la fonction.
    Ok. J'enlève de ce pas le nom de l'image du répertoire de destination.
    Le répertoire de destination et celui de la source est le même, c'est pour ça qu'on retrouve la même variable.

    Avant que j'essaie : Ceci vous semble plus correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    if (in_array($extension_upload,$extensions_valides))
    		{
    			// On récupère la taille de l'image uploadée.
    			$image_sizes = getimagesize($_FILES[$photo]['tmp_name']);
    			$parcours= "../images/temp/$nom_image";
    			$parcours_sans_nom_image="../images/temp/";
    			$transfert= move_uploaded_file($_FILES[$photo]['tmp_name'],$parcours); // Image originale
    			if ($transfert)
    			{
    				//include_once 'fonctions.php';
    				if ($slider=='1') // Création d'une image pour le slider 1423*600
    				{
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$slider_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$slider_temp= imagecreatefrompng($parcours);
    					}
    					$nom_slider_image='slider_'.$nom_image;
    					$image_slider = fctcropimage(1600,600,$parcours_sans_nom_image,$nom_slider_image,$parcours_sans_nom_image,$nom_image);
    				}
    ....

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je me suis arrêté ligne 5 : $nom_image n'est pas défini.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je me suis arrêté ligne 5 : $nom_image n'est pas défini.
    Oui. Je n'ai posté qu'une partie de la fonction. Bon je vais la tester ce soir.
    Je vous tiens au courant. En attendant la voici en entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <?php
    function upload($maxsize, $slider, $photo)
    {
    $compte_erreur=0;
    $extensions_valides = array('jpg', 'png', 'jpeg');
    // $nom_image = md5(uniqid(rand(), true)); 
    $nom_image = $_FILES[$photo]['name']; 
    if (is_file('../images/temp/'.$_FILES[$photo]['name'])) // On vérifie que le nom n'existe pas dans le répertoire
    {
    	$nom_image = '_'.$_FILES[$photo]['name']; // S'il existe déjà on lui attribue un préfixe pour le différencier
    }
     
    	// On contrôle que le fichier a bien été uploadé.
    	if ($_FILES[$photo]['error'] > 0) 
    	{
    		$message = 'Erreur lors du transfert du fichier';	
    		$compte_erreur++;
    		// On contrôle si l'erreur vient de la taille du fichier uploadé.
    		if ($_FILES[$photo]['size'] > $maxsize) 
    		{
    			$message = 'Le fichier est trop gros';
    			$compte_erreur++;
    		}
    	}
    	else // Si le transfert a réussi
    	{	
    		// On récupère l'extension du fichier pour comparaison
    		$extension_upload = strtolower(substr(strrchr($_FILES[$photo]['name'], '.'),1)); 	
    		// On compare l'extension récupérée avec les extensions de notre array et si le fichier est valide:	
    		if (in_array($extension_upload,$extensions_valides))
    		{
    			// On récupère la taille de l'image uploadée.
    			$image_sizes = getimagesize($_FILES[$photo]['tmp_name']);
    			$parcours= "../images/temp/$nom_image";
    			$parcours_sans_nom_image="../images/temp/";
    			$transfert= move_uploaded_file($_FILES[$photo]['tmp_name'],$parcours); // Image originale
    			if ($transfert)
    			{
    				//include_once 'fonctions.php';
    				if ($slider=='1') // Création d'une image pour le slider 1423*600
    				{
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$slider_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$slider_temp= imagecreatefrompng($parcours);
    					}
    					$nom_slider_image='slider_'.$nom_image;
    					$image_slider = fctcropimage(1600,600,$parcours_sans_nom_image,$nom_slider_image,$parcours_sans_nom_image,$nom_image);
    				}
    				else // Création d'une grande image 620*380
    				{
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$slider_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$slider_temp= imagecreatefrompng($parcours);
    					}
    					$nom_slider_image='slider_'.$nom_image;
    					$image_slider = fctcropimage(620,380,'$parcours','$nom_slider_image','$parcours','$nom_image');
    					imagejpeg($image_slider, "../images/temp/$nom_slider_image",100);
    				}
     
    				// création d'une autre image. 300*295
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$pt_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$pt_temp= imagecreatefrompng($parcours);
    					}
     
    					$nom_pt_image='pt_'.$nom_image;
    					$pt_image = fctcropimage(300,295,'$parcours','$nom_pt_image','$parcours','$nom_image');
    					imagejpeg($pt_image, "../images/temp/$nom_pt_image",100);
     
    				// Création de la miniature
    					if ($extension_upload=='jpg' OR $extension_upload=='jpeg')
    					{
    						$thumb_temp= imagecreatefromjpeg($parcours);
    					}
    					else
    					{
    						$thumb_temp= imagecreatefrompng($parcours);
    					}
     
    					$nom_thumb_image='thumb_'.$nom_image;
    					$thumb_image = fctcropimage(120,100,'$parcours','$nom_thumb_image','$parcours','$nom_image');
    					imagejpeg($thumb_image, "../images/temp/$nom_thumb_image",100);
     
    				$fichier_sup1= '../images/temp/'.$nom_image;
    				unlink("$fichier_sup1");
    			}
    			else
    			{
    				$message= 'Echec du transfert';
    				$compte_erreur++;
    			}
    		}
    		else // Si le fichier uploadé n'a pas une extension souhaité:
    		{		
    			$message= 'Le format du fichier uploadé n\'est pas correct.';
    			$compte_erreur++;
    		}	
    	}
    $retour= array();
    $retour['message']= $message;
    $retour['compte_erreur']= $compte_erreur;
    $retour['nom_pt_image']= $nom_pt_image;
    $retour['nom_thumb_image']= $nom_thumb_image;
    $retour['nom_slider_image']= $nom_slider_image;
    return $retour;
    }
    J'essaierai aussi de mettre en place le script sur le traitement des images proposé plus haut, lorsque j'aurai réussi à faire celui là, il est plus complet que le mien. Mais là, ça urge !!!

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    Bon voilà, comme vous pouvez le voir à l'heure de ce message, j'ai encore passé ma soirée là dessus mais cette fois-ci j'ai réussi à avoir ce que je veux. Je pense que ma fonction peut encore s'améliorer mais bon... Suis déjà content du résultat obtenu.
    La voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    <?php
    function upload($maxsize, $slider, $photo)
    {
    $compte_erreur=0;
    $extensions_valides = array('jpg', 'png', 'jpeg'); // Liste des extensions valides
    $nom_image = $_FILES[$photo]['name'];  // Nom du fichier
    $parcours_dossier="../images/news/"; // Emplacement du dossier qui contient l'image
    if (is_file($parcours_dossier.$_FILES[$photo]['name'])) // On vérifie que le nom n'existe pas dans le répertoire
    {
    	$nom_image = '_'.$_FILES[$photo]['name']; // S'il existe déjà on lui attribue un préfixe pour le différencier
    }
    $parcours= "../images/news/$nom_image"; // Emplacement de l'image
    // On contrôle que le fichier a bien été uploadé.
    if ($_FILES[$photo]['error'] > 0) 
    {
    	$message = 'Erreur lors du transfert du fichier';	
    	$compte_erreur++;
    	// On contrôle si l'erreur vient de la taille du fichier uploadé.
    	if ($_FILES[$photo]['size'] > $maxsize) 
    	{
    		$message = 'Le fichier est trop gros';
    		$compte_erreur++;
    	}
    }
    else // Si le transfert a réussi
    {	
    	// On récupère l'extension du fichier pour comparaison
    	$extension_upload = strtolower(substr(strrchr($_FILES[$photo]['name'], '.'),1)); 	
    	// On compare l'extension récupérée avec les extensions de notre array et si le fichier est valide:	
    	if (in_array($extension_upload,$extensions_valides))
    	{
    		// On récupère la taille de l'image uploadée.
    		$image_sizes = getimagesize($_FILES[$photo]['tmp_name']); //$image_sizes[0] = largeur et $image_sizes[1] = hauteur
     
    		if ($image_sizes[0] > $image_sizes[1]) // On ne garde que les images en format paysage
    		{
    			if ($image_sizes[0] >= 1600 && $image_sizes[1] >= 600) // On vérifie que l'image est assez grande.
    			{
    				$transfert= move_uploaded_file($_FILES[$photo]['tmp_name'],$parcours); // Transfert de l'image originale dans le dossier
    				if ($transfert)
    				{
    					include_once 'fonctions.php';
    					if ($slider=='1') // Création d'une image pour le slider 1600*600
    					{
    						$nom_slider_image='slider_'.$nom_image;
    						if ($image_sizes[1]>600) // Si hauteur supérieure à 600px on redimensionne avec hauteur à 600 (largeur variable pour garder proportion
    						{
    							//Calcul du coefficient de redimensionnement
    							$coeff=600/$image_sizes[1];
    							$largeur_redim=$image_sizes[0]*$coeff; // Calcul de la largeur obtenue après redimensionnement
    							if ($largeur_redim<1600) // Si largeur inférieure à 1600 alors on redimensionne par la largeur pour éviter les bandes blanches sur les côtés.
    							{
    								$redim_slider = fctredimimage(1600,0,$parcours_dossier,$nom_slider_image,$parcours_dossier,$nom_image);
    							}
    							else
    							{
    								$redim_slider = fctredimimage(0,600,$parcours_dossier,$nom_slider_image,$parcours_dossier,$nom_image);
    							}
    						}
    						else
    						{
    							$noredim=1; // si hauteur = 600 pas besoin de redimensionner
    						}
    						if ($redim_slider) // Si redimensionnement ok
    						{
    							$image_slider = fctcropimage(1600,600,$parcours_dossier,$nom_slider_image,$parcours_dossier,$nom_slider_image);
    						}
    						elseif(isset($noredim))
    						{
    							$image_slider = fctcropimage(1600,600,$parcours_dossier,$nom_slider_image,$parcours_dossier,$nom_image);
    						}
    						else
    						{
    								$compte_erreur++;
    								$message='Erreur lors du redimensionnement du slider';
    						}
    					}
    					else // Création d'une grande image 620*380
    					{
    						$nom_slider_image='slider_'.$nom_image;
    						if ($image_sizes[1]>380) // Si hauteur supérieure à 380px on redimensionne avec hauteur à 380 (largeur variable pour garder proportion
    						{
    							$redim_slider = fctredimimage(0,380,$parcours_dossier,$nom_slider_image,$parcours_dossier,$nom_image);
    						}
    						else
    						{
    							$noredim=1; // si hauteur = 600 pas besoin de redimensionner
    						}
     
    						if ($redim_slider) // Si redimensionnement ok
    						{
    							$image_slider = fctcropimage(620,380,$parcours_dossier,$nom_slider_image,$parcours_dossier,$nom_slider_image);
    						}
    						elseif(isset($noredim))
    						{
    							$image_slider = fctcropimage(620,380,$parcours_dossier,$nom_slider_image,$parcours_dossier,$nom_image);
    						}
    						else
    						{
    							$compte_erreur++;
    							$message='Erreur lors du redimensionnement du slider';
    						}
    					}
     
    					// création d'une autre image. 300*295
    						$nom_pt_image='pt_'.$nom_image;
    						//On redimensionne avec hauteur fixe
    						$redim_pt_image = fctredimimage(0,295,$parcours_dossier,$nom_pt_image,$parcours_dossier,$nom_image);
    						if ($redim_pt_image)
    						{
    							$pt_image = fctcropimage(300,295,$parcours_dossier,$nom_pt_image,$parcours_dossier,$nom_pt_image);
    						}
    						else
    						{
    							$compte_erreur++;
    							$message='Erreur lors du redimensionnement de la petite image';
    						}
     
    					// Création de la miniature
    						$nom_thumb_image='thumb_'.$nom_image;
    						//On redimensionne avec hauteur fixe
    						$redim_thumb_image = fctredimimage(0,100,$parcours_dossier,$nom_thumb_image,$parcours_dossier,$nom_image);
    						if ($redim_thumb_image)
    						{
    							$thumb_image = fctcropimage(120,100,$parcours_dossier,$nom_thumb_image,$parcours_dossier,$nom_thumb_image);
    						}
    						else
    						{
    							$compte_erreur++;
    							$message='Erreur lors du redimensionnement de la miniature';
    						}
     
    					$fichier_sup1= '../images/news/'.$nom_image;
    					unlink("$fichier_sup1");
    				}
    				else
    				{
    					$message= 'Echec du transfert';
    					$compte_erreur++;
    				}
    			}
    			else
    			{
    				$message= 'L\'image est trop petite.';
    				$compte_erreur++;
    			}
    		}
    		else
    		{
    			$message= 'L\'image doit être au format paysage.';
    			$compte_erreur++;
    		}
    	}
    	else // Si le fichier uploadé n'a pas une extension souhaité:
    	{		
    		$message= 'Le format du fichier uploadé n\'est pas correct.';
    		$compte_erreur++;
    	}	
    }
    $retour= array();
    $retour['message']= $message;
    $retour['compte_erreur']= $compte_erreur;
    $retour['nom_pt_image']= $nom_pt_image;
    $retour['nom_thumb_image']= $nom_thumb_image;
    $retour['nom_slider_image']= $nom_slider_image;
    return $retour;
    }
    Je pense que les vérifications sur le format de l'image peuvent peut-être s'enlever puisque les extensions sont vérifiées dans la fonction fctredimimage mais au moins ça me met un message d'erreur.
    Ensuite, j'impose des téléchargements d'images en mode paysage puisque je dois au final avoir une image de 1600*600 et que si j'envoie une image en portrait, une fois redimensionner, je vais juste avoir le front du gars qui est sur l'image, enfin... rien de montrable quoi. Et puis, je ne sais pas pourquoi (vous allez peut-être pouvoir me l'expliquer) quand je télécharge une image en mode portrait, j'obtiens une image noire... Aux bonnes dimensions, mais noire... Je n'ai pas trouvé pourquoi... Enfin...

    Je tiens tout de même à vous remercier pour votre contribution. Sans vous, je n'y serai pas arriver, c'est sûr. Et surtout merci au créateur de ces fonctions, elles sont vraiment top !!!!

    Si vous voyez des erreurs ou des moyens d'améliorer la fonction merci de m'en informer. De même s'il y a des choses qui vous paraissent bizarres et que vous ne comprenez pas, n'hésitez pas à poser des questions, une erreur s'y cache peut-être.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    Bon par contre, il me reste encore un petit défaut à corriger mais je ne vois pas comment.
    J'ai téléchargé une image de 4000*2000px.
    La fonction la redimensionne correctement. Puis elle l'a coupe aussi mais elle l'a coupe en rognant la moitié en haut, l'autre moitié en bas. Du coup, il manque la tête du bonhomme présent sur la photo. Il aurait été mieux que l'image soit rognée juste en bas mais bon, je présume que dans d'autres cas, il est mieux de rogner un peu en haut, un peu en bas...
    Pas sûr qu'il existe une solution.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    remplace :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $extension_upload = strtolower(substr(strrchr($_FILES[$photo]['name'], '.'),1));
    par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $extension_upload = strtolower(pathinfo($_FILES['photo']['name'],PATHINFO_EXTENSION));

    Sinon, concernant ton souci, le mieux est encore de dimensionner correctement l'image AVANT de l'uploader...

    Ou ajouter un paramètre à la fonction. Mais là, je te laisse le coder toi-même

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    merci

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Oui autant les redimensionnements d'images ne posent pas de problèmes bien qu'on ait de bien meilleurs résultats dans un logiciel photo quand il y a un gros rapport de réduction à faire, autant les crop automatiques sont aléatoires et suivant les cas peuvent donner une image sans intérêt.
    Ou il faudrait le faire côté client en choisissant le cadrage. Mais dans ce cas et si l'on fait tout en javascript cela demande pas mal de ressources côté client et donc ce ne sera pas compatible avec tous les périphériques. Bref le crop automatique si tu peux éviter, tu éviteras des mauvaises surprises

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] amélioration d'une fonction pour trouver la lettre de la colonne
    Par illight dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 16/12/2013, 15h48
  2. [PHP 5.3] Amélioration d'une fonction de formatage
    Par General_Batton dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2012, 08h45
  3. [CKEditor] Upload : Désactiver une fonction
    Par LoKiDemon dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 24/06/2008, 15h35
  4. Réponses: 2
    Dernier message: 23/08/2007, 12h22
  5. Réponses: 3
    Dernier message: 30/11/2006, 06h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo