pour mon site, je dois créer des images de taille normal, et des images de taille réduites (miniatures).
L'image de taille normal ce crée bien grace à ce bout de code :
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
 
<?php
 
//
//ENVOIE DE L'IMAGE DANS LE REPERTOIRE ./images SOUS LE NOM  D'ORIGINE
//
$nom =  $_FILES['fichier']['name'];//Nom du fichier
$tmp = $_FILES['fichier']['tmp_name'];//Chemin temporaire de l'image
$ext = substr($nom, -3);//Extraction de l'extension
 
//On vérifie que l'image ne prend pas trop de place et qu'elle n'est pas déjà en .gif
if (($_FILES['fichier']['size'] < 2000000) || ($ext == 'gif'))
{
	// On vérifie si le champ est rempli
	if(!empty($_FILES['fichier']['name']))
	{
		if(move_uploaded_file($_FILES['fichier']['tmp_name'],$repCible.$_FILES['fichier']['name']))
		{
			if (($ext == 'jpg') || ($ext == 'JPG'))
			{
				$source = imagecreatefromjpeg("" . $repCible . "" . $nom . ""); // La photo est la source
			}
			else
			{
				$fonction = 'imagecreatefrom'.$ext;
				$source = $fonction("" . $repCible . "" . $nom . ""); // La photo est la source
			}
 
			if (isset ($source))
			{
				$hauteur = $_POST['hauteur'];
				$largeur = $_POST['largeur'];
				$destination = imagecreatetruecolor($largeur, $hauteur); // On crée la miniature vide
 
				// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
				$largeur_source = imagesx($source);
				$hauteur_source = imagesy($source);
				$largeur_destination = imagesx($destination);
				$hauteur_destination = imagesy($destination);
 
				// On crée la miniature
				imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
 
				// On enregistre la miniature
				//$nom = str_replace(substr($nom, -4), ".gif", $nom); //Met toujours une extension .gif mais pas réelement utile car le poids de l'image ne diminue pas, de plus cela provoque un problème de suppression du fichier source
				imagegif($destination, '' . $repCible . '' . $nom . '');
			}
			else
			{
				echo 'Le format de cette image ne peut pas être prit en compte';
			}
		}
		else
		{
			// Sinon on affiche une erreur système
			echo '<b>Problème lors de l\'upload !</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br /><br />';
		}
	} 
	else
	{
		// Sinon on affiche une erreur pour le champ vide
		echo '<b>Le champ du formulaire est vide !</b><br /><br />';
	}
}
else
{
	//Sinon on affiche une erreur car la taille est trop grande et on conseil le .gif
	echo 'Cette image est trop volumineuse, veuillez la convertir en .gif afin qu\'elle prenne moins de place';
}
?>
Mais pour la miniature sa m****, et uniquement avec le format jpeg !!

J'ai cette erreur
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in D:\Program Files\EasyPHP 2.0b1\www\pierre\Include\miniature.inc.php on line 4

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'D:/Program Files/EasyPHP 2.0b1/www/pierre/images/entreprise/historique/recette.jpg' is not a valid JPEG file in D:\Program Files\EasyPHP 2.0b1\www\pierre\Include\miniature.inc.php on line 4
Pourtant, vous pouvez voir que dans mon code qui fonctionne, j'utilise aussi la fontion imagecreatefromjpeg !! Je ne vois pas pourquoi elle ne fonctionnerait pas cette fois ci.

Mon code pour les miniature est le suivant :
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
 
<?php
if (($ext == 'jpg') || ($ext == 'JPG'))
{
	$source = imagecreatefromjpeg("" . $repCible . "" . $nom . ""); // La photo est la source
}
else
{
	$fonction = 'imagecreatefrom'.$ext;
	$source = $fonction("" . $repCible . "" . $nom . ""); // La photo est la source
}
$destination = imagecreatetruecolor(100, 100); // On crée la miniature vide
 
// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);
 
// On crée la miniature
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
 
// On enregistre la miniature sous le nom "mini_couchersoleil.jpg"
imagegif($destination, '' . $repCible . 'mini_' . $nom . '');
?>
Je réutilise certaines variables du premier morceau de code car je les include les un sous les autres (avec l'image de taille normal en premier bien sur !!).

Enfin, voici le code qui appel ces fonctions et qui enregistre tous sa dans ma base de données :
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
 
<?php
include($_SERVER["DOCUMENT_ROOT"]."/pierre/Include/RemplacementBBCode.inc.php"); //Insertion du code de remplacement des balises BBCode en balises HTML
$repCible = ($_SERVER["DOCUMENT_ROOT"]."/pierre/images/entreprise/historique/"); //Répertoire destination
$hauteur = $_POST['hauteur'];
$largeur = $_POST['largeur'];
include($_SERVER["DOCUMENT_ROOT"]."/pierre/Include/Upload.inc.php"); //Insertion du code d'upload de l'image
$repCible = ($_SERVER["DOCUMENT_ROOT"]."/pierre/images/entreprise/historique/"); //Répertoire destination
include($_SERVER["DOCUMENT_ROOT"]."/pierre/Include/miniature.inc.php"); //Insertion du code d'upload de l'image miniature
include($_SERVER["DOCUMENT_ROOT"]."/pierre/Include/mysql.inc.php"); //Connexion à la base de données
$sql = "INSERT INTO historique (hist_id, hist_date, hist_descr, hist_img) VALUES ('','".mysql_real_escape_string($_POST['titre'])."','".$texte."','".mysql_real_escape_string($nom)."');";
mysql_query($sql, $cnx) or die("Erreur dans $sql");
mysql_close();
header("location:./index.php");
?>
Merci d'avance pour votre aide.