Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > GD
GD Forum d'entraide pour l'extension GD permettant de manipuler des images en PHP. Avant de poster -> tutoriels GD
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 18/02/2007, 23h38   #1
Membre régulier
 
Étudiant
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 75
Points : 75
Envoyer un message via MSN à Henry9 Envoyer un message via Yahoo à Henry9
Par défaut uploader un fichier et même temps le redimensionner

Bonjour,
donc voilà, mon code permet d'uploader une image et en même temps de le redimensionner par 5, c'est à dire multiplier les dimensions de l'image par 20/100.

Le problème c'est que l'image est bien envoyé mais pas redimensionné, voici mon 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
<?php
if(isset($_POST['envoi'])) {
			$img = imagecreatefromjpeg ($_FILES['image']['tmp_name']);
			$size = getimagesize($_FILES['image']['tmp_name']);
			$fichier = $_FILES['image']['name'];			
			$chemin = $_FILES['image']['tmp_name'];
 
			$larg=$size[0];
			$long=$size[1];
			$larg = $larg*20/100;
			$long = $long*20/100;
			$img_dest=imagecreatetruecolor($larg,$long);
			$copy = imagecopyresampled($img_dest, $img, 0, 0, 0, 0, $larg, $long, $size[0], $size[1]);
			header('Content-type: image/jpeg');
 
			$destination = "image/";
			$resultat = move_uploaded_file($chemin, $destination.$fichier);
			if($resultat==true) 
			echo "Fichier envoyé avec succès";
			imagedestroy($img_dest);
 
 
}
?>
merci d'avance de votre aide.
Henry9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2007, 23h53   #2
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut cast le size

Es-tu tu certain que $size[0] et $size[1] retournent bien chacun un nombre de type int et non de type string?

Si ce n'est pas le cas, cast les

Code :
1
2
(int) $larg = size[0];
(int) $long = size[1];
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2007, 23h53   #3
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut juste une précision

Le cast est aussi nommé le transtypage.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2007, 23h57   #4
Membre régulier
 
Étudiant
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 75
Points : 75
Envoyer un message via MSN à Henry9 Envoyer un message via Yahoo à Henry9
effectivement je ne sais pas si $size[0] renvoit un int, mais je sais que si je sépare mon code en deux: un pour l'upload et l'autre pour le redimensionnement, ça marche.

sinon j'ai transtypé en int mais ça ne change pas grand chose.
Henry9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2007, 00h07   #5
Membre régulier
 
Étudiant
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 75
Points : 75
Envoyer un message via MSN à Henry9 Envoyer un message via Yahoo à Henry9
C'est dans l'optique de faire une gallerie d'image. Le code PHP se trouve déjà là haut, et ensuite le code html du formulaire le voici:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<head><title>Upload d'image</title></head>
<body>
 
<!-- création du formulaire -->
<form enctype="multipart/form-data" method="POST" action="upload.php">
<p>Votre image : <br>
<input type="file" name="image" size="20"><br>
<input type="submit" name="envoi" value="ok">
</p>
</form>
</body>
</html>
après pour l'image, tu peux prendre ce que tu veux au format jpg.
Henry9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2007, 00h17   #6
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut oki je teste

Je teste et je renvoie un post pour te tenir au courant
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2007, 00h28   #7
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut je viens de comprendre

En fait ton objectif n'est pas de redimensionner l'affichage de l'image mais réellement le fichier de l'image!!???

Je ne sais pas si PHP peut faire cela. Tu peux très facilement redimensionner l'image au moment de l'affichage mais pour redimensionner dans le fichier il faut que tu utilises un logiciel de dessin qui va te permettre de le faire.

Ou si PHP peut le faire, je serai vraiment curieux de savoir comment...
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2007, 00h36   #8
Membre régulier
 
Étudiant
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 75
Points : 75
Envoyer un message via MSN à Henry9 Envoyer un message via Yahoo à Henry9
Ah ok, c'est bon, je pense avoir compris. D'après toi, la librairie GD fait le redimensionnement seulement pour l'affichage mais ne redimensionne pas réellement le fichier.

Dans ce cas, je n'ai qu'à couper mon code en deux: un pour l'upload et pour l'affichage, je prendrai la source de l'image situé dans le répertoire image.

Merci
Henry9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2007, 08h55   #9
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut oui c'est exactement ça

C'est exactement la solution que j'ai adopté pour un projet similaire (www.dirtracing.fr).

Code :
echo '<img class="nnn" src="pictures/'. $ligne['nom_photo'] .'" width=125 height=125 />';
qui donnerait dans ton cas:

Code :
1
2
3
4
5
 
$w = size[0]* 20 / 100;
$h = size[0] * 20 / 100;    // Oui j'aime bien les espaces entre les opérateurs
 
echo '<img class="nnn" src="pictures/'. $ligne['nom_photo'] .'" width='. $w .' height='. $h .' />';
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2007, 16h42   #10
Membre régulier
 
Étudiant
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 75
Points : 75
Envoyer un message via MSN à Henry9 Envoyer un message via Yahoo à Henry9
Ok, ça c'est vraiment ce que j'appellerai du redimensionnement en direct.

Mais avec 10 wallpapers sur page, s'il faut qu'il y ait un redimensionnement à chaque affichage pour chacun d'entre eux, ça serait....

Bref à moins que quelqu'un d'autre ait une solution, je vais prendre ton idée zyongh, mais j'aimerai utilisé plutôt une fonction pour la clarté du genre:

Code :
redim('url_de_limage');
avec mon précédent code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function redim_pic($image)
{
	$img = imagecreatefromjpeg ($image);
	$size = getimagesize($image);
	$larg=$size[0] *20/100;
	$long=$size[1] *20/100;
	$img_dest=imagecreatetruecolor($larg,$long);
	$copy = imagecopyresampled($img_dest, $img, 0, 0, 0, 0, $larg, $long, $size[0], $size[1]);
	header('Content-type: image/jpeg'); //Affichage de limage sur le browser.
}
 
?>
Le problème c'est que ça ne marche pas si je passe en paramètre directement le lien de l'image j'obtiens une petit image carré avec une croix à l'intérieur le lien de l'image pointe vers upload.php
Henry9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2007, 19h39   #11
Membre régulier
 
Étudiant
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 75
Points : 75
Envoyer un message via MSN à Henry9 Envoyer un message via Yahoo à Henry9
je ne vois pas trop pourquoi tu fais deux redim_pic:

je viens d'essayer avec:

Code :
redim_pic("image/DSC00078.JPG", 200, 200);
et en faite, il n'y a rien qui apparaît.


sinon pour la fonction, pour faire l'affichage de l'image jpeg, c'est la fonction imagejpeg et non header()

Code :
1
2
3
4
5
6
7
8
9
10
<?php
function redim_pic($image, $larg, $long) {
    $img = imagecreatefromjpeg ($image);
    $size = getimagesize($image); 
    $img_dest=imagecreatetruecolor($larg,$long);
    $copy = imagecopyresampled($img_dest, $img, 0, 0, 0, 0, $larg, $long, $size[0], $size[1]); 
    header('Content-type: image/jpeg');
    imagejpeg($img_dest);  //Affichage de limage sur le browser. }   
}
?>
Henry9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2007, 23h29   #12
Membre éclairé
 
Avatar de icer
 
Inscription : janvier 2006
Messages : 332
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 332
Points : 308
Points : 308
Essayez de voir du côté de la fonction imagecopyresized de la bibliothèque gd.
icer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h21.


 
 
 
 
Partenaires

Hébergement Web