Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/06/2011, 20h26   #1
Membre Expert
 
Avatar de beegees
 
Homme David Vincent (l'homme qui a vu les extra-terrestres)
Développeur Web
Inscription : mars 2004
Messages : 3 239
Détails du profil
Informations personnelles :
Nom : Homme David Vincent (l'homme qui a vu les extra-terrestres)
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 3 239
Points : 1 046
Points : 1 046
Par défaut Redimensionnement d'une image

Bonjour à tous,

J'upload des images en vérifiant le type et la taille des fichiers uploadés.

Je voudrais maintenant redimensionner les photos et les mettre dans un autre dossier.

J'utilise pour cela un tuto trouvé sur dvp.com :

ftp://ftp-developpez.com/j-reaux/tut...nner-image.pdf

J'ai donc cette fonction (où j'ai corrigé un peu le code) :

Code :
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
 
<?php
// -----------------------------------------------------------------------------------------------------
// fonction de REDIMENSIONNEMENT physique "NON-PROPORTIONNEL" et Enregistrement
// -----------------------------------------------------------------------------------------------------
// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
// -----------------------------------------------------------------------------------------------------
// La FONCTION : fctdeformimage ($W_fin, $H_fin, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
// Les parametres :
// - $W_fin : LARGEUR finale --> ou 0
// - $H_fin : HAUTEUR finale --> ou 0
// - $rep_Dst : repertoire de l image de Destination (deprotégé) --> ou '' (meme repertoire)
// - $img_Dst : NOM de l image de Destination --> ou '' (meme nom que l image Source)
// - $rep_Src : repertoire de l image Source (deprotégé)
// - $img_Src : NOM de l image Source
// -----------------------------------------------------------------------------------------------------
// 3 options :
// A- si $W_fin != 0 et $H_fin != 0 : image finale a LARGEUR ET HAUTEUR fixes
// B- si $H_fin != 0 et $W_fin == 0 : image finale a HAUTEUR fixe (largeur auto)
// C- si $W_fin == 0 et $H_fin != 0 : image finale a LARGEUR fixe (hauteur auto)
// Dans TOUS les cas : redimensionnement non-proportionnel
// -----------------------------------------------------------------------------------------------------
// $rep_Dst : il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod)
// - si $rep_Dst = '' : $rep_Dst = $rep_Src (meme repertoire que l image Source)
// - si $img_Dst = '' : $img_Dst = $img_Src (meme nom que l image Source)
// - si $rep_Dst='' ET $img_Dst='' : on ecrase (remplace) l image source !
// -----------------------------------------------------------------------------------------------------
// NB : $img_Dst et $img_Src doivent avoir la meme extension (meme type mime) !
// Extensions acceptees (traitees ici) : .jpg , .jpeg , .png
// Pour ajouter d autres extensions : voir la bibliotheque GD ou ImageMagick
// (GD) NE fonctionne PAS avec les GIF ANIMES ou a fond transparent !
// -----------------------------------------------------------------------------------------------------
// UTILISATION (exemple) :
// $deformOK = fctredimimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
// if ($deformOK == 1) { echo 'Redimensionnement OK !'; }
// -----------------------------------------------------------------------------------------------------
function fctdeformimage($W_fin, $H_fin, $rep_Dst, $img_Dst, $rep_Src, $img_Src) {
// ------------------------------------------------------------------
// Si certains parametres ont pour valeur '' :
if ($rep_Dst == '') { $rep_Dst = $rep_Src; } // (meme repertoire)
if ($img_Dst == '') { $img_Dst = $img_Src; } // (meme nom)
// ------------------------------------------------------------------
// si le fichier existe dans le répertoire, on continue...
if (file_exists($rep_Src.$img_Src) && ($W_fin!=0 || $H_fin!=0)) {
// ----------------------------------------------------------------
// extensions acceptees :
$ExtfichierOK = '" jpg jpeg png JPEG"'; // (l espace avant jpg est important)
// extension fichier Source
$tabimage = explode('.',$img_Src);
$extension = $tabimage[sizeof($tabimage)-1]; // dernier element
$extension = strtolower($extension); // on met en minuscule
// ----------------------------------------------------------------
// extension OK ? on continue ...
if (strpos($ExtfichierOK,$extension) != '') {
// -------------------------------------------------------------
// recuperation des dimensions de l image Src
$img_size = getimagesize($rep_Src.$img_Src);
$W_Src = $img_size[0]; // largeur
$H_Src = $img_size[1]; // hauteur
// -------------------------------------------------------------
// condition de redimensionnement et dimensions de l image finale
// Dans TOUS les cas : redimensionnement non-proportionnel
// -------------------------------------------------------------
// A- LARGEUR ET HAUTEUR fixes
if ($W_fin != 0 && $H_fin != 0) {
$W = $W_Src;
$H = $H_Src;
}
// -------------------------------------------------------------
// B- HAUTEUR fixe
if ($W_fin == 0 && $H_fin != 0) {
$W = $W_Src;
$H = $H_fin;
}
// -------------------------------------------------------------
// C- LARGEUR fixe
if ($W_fin != 0 && $H_fin == 0) {
$W = $W_fin;
$H = $H_Src;
}
// -------------------------------------------------------------
// REDIMENSIONNEMENT
// ----------------------------------------------------------
// creation de la ressource-image "Src" en fonction de l extension
switch($extension) {
case 'jpg':
case 'JPEG':
case 'jpeg':
$Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src);
break;
case 'png':
$Ress_Src = imagecreatefrompng($rep_Src.$img_Src);
break;
}
// ----------------------------------------------------------
// creation d une ressource-image "Dst" aux dimensions finales
// fond noir (par defaut)
switch($extension) {
case 'jpg':
case 'JPEG':
case 'jpeg':
$Ress_Dst = imagecreatetruecolor($W,$H);
break;
case 'png':
$Ress_Dst = imagecreatetruecolor($W,$H);
// fond transparent (pour les png avec transparence)
imagesavealpha($Ress_Dst, true);
$trans_color = imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127);
imagefill($Ress_Dst, 0, 0, $trans_color);
break;
}
// ----------------------------------------------------------
// REDIMENSIONNEMENT (copie, redimensionne, re-echantillonne)
imagecopyresampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);
// ----------------------------------------------------------
// ENREGISTREMENT dans le repertoire (avec la fonction appropriee)
switch ($extension) {
case 'jpg':
case 'JPEG':
case 'jpeg':
imagejpeg ($Ress_Dst, $rep_Dst.$img_Dst);
break;
case 'png':
imagepng ($Ress_Dst, $rep_Dst.$img_Dst);
break;
}
// ----------------------------------------------------------
// liberation des ressources-image
imagedestroy ($Ress_Src);
imagedestroy ($Ress_Dst);
}
// -------------------------------------------------------------
}
 
// -----------------------------------------------------------------------------------------------------
// si le fichier a bien ete cree
if (file_exists($rep_Dst.$img_Dst)) { return true; }
else { return false; }
}
// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
// -----------------------------------------------------------------------------------------------------
?>
Je devrais obtenir "Redimensionnement OK !" :

Code :
if ($deformOK == 1) { echo 'Redimensionnement OK !'; }
mais je n'obtiens rien (aucun message d'erreur).

Voyez-vous ce qui ne pourrait pas fonctionner ?

Merci d'avance

beegees
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 21h36   #2
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Citation:
Envoyé par beegees Voir le message
Bonjour à tous,
J'upload des images en vérifiant le type et la taille des fichiers uploadés.
Je voudrais maintenant redimensionner les photos et les mettre dans un autre dossier.
Oui mais tu pourrais aussi faire le redimensionnement en même temps que l'upload. Cela ne serait-il pas plus simple ?
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 22h13   #3
Membre régulier
 
Homme
Développeur Web
Inscription : octobre 2009
Messages : 72
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Vietnam

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2009
Messages : 72
Points : 99
Points : 99
Es-tu certain que la taille du fichier uploadé ne dépasse pas la valeur de MAX_FILE_SIZE ?
matlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 01h32   #4
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Citation:
Envoyé par matlow Voir le message
Es-tu certain que la taille du fichier uploadé ne dépasse pas la valeur de MAX_FILE_SIZE ?
Heu... y'a pas de fonction d'upload dans son code

Cela dit il pourrait se heurter à la mémoire limite max utilisable pour son script.

@beegees à la fin de ton code le temps de débugguer écris plutôt
Code :
1
2
if (file_exists($rep_Dst.$img_Dst)) { echo 'fichier créé'; }
else { echo 'fichier non créé'; }
Si tu n'a rien d'écrit c'est que tu as dépassé le memory limit, donc tes images sont grosses pour pouvoir être redimensionnées. Soit tu utilise des images plus petites, soit tu augmente le memory_limit (mais c'est impossible sur un mutualisé).Tu peux aussi gérer l'erreur de dépassement du memory_limit pour au moins éviter la page blanche et avoir un message approprié.

Sinon ma première question reste d'actualité. Souhaites tu faire un redimensionnement séparé ou ne serait-il pas plus simple de le faire lors de l'upload ?
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 09h21   #5
Membre Expert
 
Avatar de beegees
 
Homme David Vincent (l'homme qui a vu les extra-terrestres)
Développeur Web
Inscription : mars 2004
Messages : 3 239
Détails du profil
Informations personnelles :
Nom : Homme David Vincent (l'homme qui a vu les extra-terrestres)
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 3 239
Points : 1 046
Points : 1 046
Salut à vous,

Merci pour vos réponses.

Citation:
Envoyé par ABCIWEB Voir le message
Heu... y'a pas de fonction d'upload dans son code
Si, j'ai du code d'upload qui fonctionne parfaitement, mais que je ne vous ai peut-être pas montré.


Code :
Cela dit il pourrait se heurter à la mémoire limite max utilisable pour son script.
Non, pas du tout.

Citation:
@beegees à la fin de ton code le temps de débugguer écris plutôt
Code :
1
2
if (file_exists($rep_Dst.$img_Dst)) { echo 'fichier créé'; }
else { echo 'fichier non créé'; }
OK

Citation:
Si tu n'a rien d'écrit c'est que tu as dépassé le memory limit, donc tes images sont grosses pour pouvoir être redimensionnées. Soit tu utilise des images plus petites, soit tu augmente le memory_limit (mais c'est impossible sur un mutualisé).
J'ai en effet augmenté la limite à 20 mb dans php.ini

Citation:
Sinon ma première question reste d'actualité. Souhaites tu faire un redimensionnement séparé ou ne serait-il pas plus simple de le faire lors de l'upload ?
As-tu une astuce pour redimensionner directement lors de l'upload ? Je suis alors preneur.

Important :

En relisant la documentation du tuto, je me suis aperçu qu'il fallait installer GD, la bibliothèque image de PHP (chose que je n'avais pas encore fait).

Merci pour le suivi.

beegees
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 19h52   #6
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Citation:
Envoyé par beegees Voir le message
As-tu une astuce pour redimensionner directement lors de l'upload ? Je suis alors preneur.
Oui cette classe sait faire cela en sauvegardant ou non le fichier initial, un ou plusieurs redimensionnements par image sont possibles avec en plus la gestion des erreurs (entre autre dépassement de memory_limit, post_max_size et upload_max_filesize).
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/06/2011, 20h02   #7
Membre Expert
 
Avatar de beegees
 
Homme David Vincent (l'homme qui a vu les extra-terrestres)
Développeur Web
Inscription : mars 2004
Messages : 3 239
Détails du profil
Informations personnelles :
Nom : Homme David Vincent (l'homme qui a vu les extra-terrestres)
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 3 239
Points : 1 046
Points : 1 046
Citation:
Envoyé par ABCIWEB Voir le message
Oui la classe en pj sait faire cela en sauvegardant ou non le fichier initial, un ou plusieurs redimensionnements par image sont possibles avec en plus la gestion des erreurs (entre autre dépassement de memory_limit, post_max_size et upload_max_filesize).
Merci à toi.

Est-ce que je peux utiliser uniquement la partie redimensionnement de la classe ?

J'ai déjà le code de l'upload, du check de l'extension et de la taille.

Merci encore à toi pour ton aide.

beegees
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 21h18   #8
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Citation:
Envoyé par beegees Voir le message
Est-ce que je peux utiliser uniquement la partie redimensionnement de la classe ?
Non ce serait beaucoup trop compliqué alors que la classe est faite pour être utilisée de manière simple en quelques lignes.
Par exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php require('class_upload.php');// chargement de la classe
 
$up = new Telechargement('PHOTO','form1','phot');// téléchargement dans le répertoire "PHOTO", témoin d'envoi du formulaire : "form1", nom du champ d'upload du formulaire : "phot"
 
$extensions = array('jpg','jpeg');
$up->Set_Extensions_accepte ($extensions); // envoi le tableau des extensions acceptées
 
$up->Set_Redim ('200','150');// redimensionne en maximum 200 de largeur et maximum 150 de hauteur
 
$up->Upload('reload');// envoi des commandes, réalise l'upload et recharge la page avec l'option "reload" en paramètre.
?>
<form enctype = "multipart/form-data" action = "#" method = "post">      
<input name = "phot" type = "file" size = "70" />                                 
<input type = "submit" name = "form1" value = "Envoyez"  />    
</form>
Là il y a déjà tout le code pour faire l'upload et le redimensionnement. On peut guère faire plus simple

Ensuite si tu veux tu pourrais ajouter facilement des options qui sont inclues sous forme de commandes dans la classe, par exemple :

- une ligne pour incrémenter le nom de fichier si un fichier de même nom se trouve déjà sur le serveur (ou au choix additionner un suffixe unique).
- Ou une ligne pour imposer un nom de fichier.
- Une ligne pour afficher le résultat du téléchargement et gérer les erreurs.
etc.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h43.


 
 
 
 
Partenaires

Hébergement Web