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 31/03/2007, 17h03   #1
Membre du Club
 
Inscription : mars 2007
Messages : 123
Détails du profil
Informations personnelles :
Localisation : France, Côte d'Or (Bourgogne)

Informations forums :
Inscription : mars 2007
Messages : 123
Points : 67
Points : 67
Par défaut imagecreatefromjpeg & getimagesize

voilà : j'ai
Code :
1
2
3
4
5
6
7
8
9
10
11
<?php
function getVignette($id) {
	$id = intval($id);
	$file = "photo.php?id=$id"; 
	$image = imagecreatefromjpeg($file);
	$details = getimagesize($file);
	$s = ($details[0]>$details[1])?'width="100"':'height="100"';
	$s = '<img src="photo.php?id='.$id.'" '.$s.'>';
	return $s;
}
?>
et voici : photo.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if (isset($_GET['id'])) {
  $id = intval($_GET['id']);
  include("connexion.php");
  $req = "SELECT photo_blob, photo_type FROM produits WHERE id = ".$id;
  $ret = mysql_query($req) or die (mysql_error());
  $col = mysql_fetch_row($ret);
 
  if (!$col[0]) {
    echo "Id d'image inconnu";
  } else {
    header("Content-type: ".$col[1]);
    echo $col[0];
  }
} else {
  echo "Mauvais Id d'image";
}
?>
et j'a le message :

Citation:
Warning: imagecreatefromjpeg(photo.php?id=13): failed to open stream: No such file or directory in includes/functions.inc.php on line 4

Warning: getimagesize(photo.php?id=13): failed to open stream: No such file or directory in includes/functions.inc.php on line 5

Ce que je veux faire : récupérer la taille de l'image en BD et la faire tenir dans un carré de 100*100 grâce aux redimenssionements de la balise html <img>
jpean.net est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 17h21   #2
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
Envoyé par jpean.net
Ce que je veux faire : récupérer la taille de l'image en BD et la faire tenir dans un carré de 100*100 grâce aux redimenssionements de la balise html <img>
Bonjour,

Pourquoi ne fais tu pas simplement :
Code :
<img src"..." width="100" height="100">
Puisque tu veux qu'elle ait cette dimension ??

Tu n'as pas besoin de connaitre sa taille de départ puisqu'à la fin elle devra faire 100*100

Code :
1
2
3
4
5
6
7
 <?php
function getVignette($id) {
$id = intval($id);
$file = "photo.php?id=$id"; 
return "<img src='".$file."'  width='100' height='100'>";
}
?>
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 17h23   #3
Membre du Club
 
Inscription : mars 2007
Messages : 123
Détails du profil
Informations personnelles :
Localisation : France, Côte d'Or (Bourgogne)

Informations forums :
Inscription : mars 2007
Messages : 123
Points : 67
Points : 67
parce que si l'image de départ (je prends l'extrême) a une dimension de 100*400, elle sera complêtement déformée.

donc j'aimerai garder les proportion sans que ça dépasse 100*100
jpean.net est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 17h26   #4
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
oui, mais le code que tu as posté ne disait pas ça .

il faut utiliser imagecopyresampled() :
Citation:
Envoyé par DocPHP
Exemple 2. Redimensionnement proportionnel d'une image
Cet exemple affichera une image avec une largeur ou une hauteur maximale de 200 pixels.

<?php
// Le fichier
$filename = 'test.jpg';

// Définition de la largeur et de la hauteur maximale
$width = 200;
$height = 200;

// Content type
header('Content-type: image/jpeg');

/ Cacul des nouvelles dimensions
list($width_orig, $height_orig) = getimagesize($filename);

$ratio_orig = $width_orig/$height_orig;

if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}

// Redimensionnement
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

//Affichage
imagejpeg($image_p, null, 100);
?>
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 17h31   #5
Membre du Club
 
Inscription : mars 2007
Messages : 123
Détails du profil
Informations personnelles :
Localisation : France, Côte d'Or (Bourgogne)

Informations forums :
Inscription : mars 2007
Messages : 123
Points : 67
Points : 67
Par défaut je peux me tromper mais

ce n'est pas ce que font ces lignes ?

Code :
1
2
3
$details = getimagesize($file);
$s = ($details[0]>$details[1])?'width="100"':'height="100"';
$s = '<img src="photo.php?id='.$id.'" '.$s.'>';
jpean.net est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 17h34   #6
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
non, là tu redimensionnes la largeur ou la hauteur. Mais pas proportionnellement. Tu peux donc te retrouver avec une image de 400 * 100 ou de 100 * 400
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 17h41   #7
Membre du Club
 
Inscription : mars 2007
Messages : 123
Détails du profil
Informations personnelles :
Localisation : France, Côte d'Or (Bourgogne)

Informations forums :
Inscription : mars 2007
Messages : 123
Points : 67
Points : 67
cette fois, je dois sûirement me trompr alors, parce que je pensais que quand, dans une balise <img>, tu ne spécifie QUE la largeur OU la hauteur, les proportions étaient gardées (je pense que je vais garder ton code, mais j'aimerai bien comprendre mon erreur)
?
jpean.net est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 17h43   #8
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Il y a aussi imagecopyresized() Mais La qualité sera meilleure avec resampled()
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 18h07   #9
Membre du Club
 
Inscription : mars 2007
Messages : 123
Détails du profil
Informations personnelles :
Localisation : France, Côte d'Or (Bourgogne)

Informations forums :
Inscription : mars 2007
Messages : 123
Points : 67
Points : 67
J'a mit ça ...

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
<?php
include_once("connexion.php");
 
// Le fichier
$id = $_GET["id"];
$filename = "photo.php?id=$id";
 
// Définition de la largeur et de la hauteur maximale
$width = 100;
$height = 100;
 
// Content type
$req = "SELECT photo_type FROM produits WHERE id = ".$id;
$ret = mysql_query($req) or die (mysql_error());
$col = mysql_fetch_row($ret);
$header = $col[0];
header("Content-type: $header");
 
// Cacul des nouvelles dimensions
list($width_orig, $height_orig) = getimagesize($filename);
 
$ratio_orig = $width_orig/$height_orig;
 
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
 
// Redimensionnement
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
 
//Affichage
imagejpeg($image_p, null, 100);
?>
mais j'ai :

Warning: getimagesize(photo.php?id=13): failed to open stream: No such file or directory in vignette.php on line 20

Warning: Division by zero in vignette.php on line 22

Fatal error: Call to undefined function: imagecreatetruecolor() in vignette.php on line 31
jpean.net est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 18h20   #10
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
getimagesize() : je crois qu'il faut spécifier un nom de fichier . "un fichier en dur"

Division by zero : c'est normal puisqu'il n'a pas récupéré avec getimagesize()

imagecreatetruecolor() : GD2 et PHP >= 4.0.6 et pas GIF (voir phpinfo() )
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 19h04   #11
Membre du Club
 
Inscription : mars 2007
Messages : 123
Détails du profil
Informations personnelles :
Localisation : France, Côte d'Or (Bourgogne)

Informations forums :
Inscription : mars 2007
Messages : 123
Points : 67
Points : 67
ok. Dans ce cas, comment puis-je mettre en dur (quitte à l'effacer après) un fichier enrgistré en BLOB dans une BD ? dans ce cas à une image, bine sûr.
jpean.net est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 19h27   #12
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
fwrite() - fopen() - fread() ?
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2007, 15h11   #13
Membre du Club
 
Inscription : mars 2007
Messages : 123
Détails du profil
Informations personnelles :
Localisation : France, Côte d'Or (Bourgogne)

Informations forums :
Inscription : mars 2007
Messages : 123
Points : 67
Points : 67
j'ai fait ça et ça marche .

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getVignette($id) {
	$id = intval($id);
	include("connexion.php");
	$req = "SELECT photo_blob, photo_type FROM produits WHERE id = ".$id;
	$ret = mysql_query($req) or die (mysql_error());
	$col = mysql_fetch_row($ret);
	$file = fopen("photo$id.tmp", 'w+');
	fwrite($file, $col[0]);
	fclose($file);
	$file = "photo$id.tmp"; 
	list($width, $height) = getimagesize($file);
	$s = ($width>$height)?'width="100"':'height="100"';
	$s = '<img src="photo.php?id='.$id.'" '.$s.'>';
	return $s;
}
Merci !

Un dernier truc...

Comme vous le voyez, je n'efface pas le fichier créé... Par contre, impossible de le voir avec Filezilla... vous sauriez pas pourquoi ?
jpean.net est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2007, 15h21   #14
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Code :
$file = fopen("photo".$id.".tmp", 'w+');
N1bus 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 05h51.


 
 
 
 
Partenaires

Hébergement Web