imagecreatefromjpeg

Répondre
fausto
le 11/03/2007 à 18:51
fausto
bonjour,

je souhaiterais créer une miniature depuis une jpg uploadée via un formulaire
et je n'arrive pas à la créer
<?php	
//--------------------------------------------------------------------------------------------
//test photo
//--------------------------------------------------------------------------------------------
if (isset($_FILES['photo']))
//--------------------------------------------------------------------------------------------
{

$photo=$_FILES['photo']['name'];
$size=$_FILES['photo']['size'];
$tmp=$_FILES['photo']['tmp_name'];
$type=$_FILES['photo']['type'];
//on récup la taille de l'image
list($width,$height)=getimagesize($tmp);
if (is_uploaded_file($tmp))
/////////////////////////////////////////////////////////////////////////////////////////////
{
//vérif du type de l'image de son poids et de sa taille (jpg <=500Ko et <=800 * 600 px)
if ($type="image/jpg" OR $type="image/gif" && $size<=500000 && $width<=800 && $height<=600)
//_________________________________________________________________________________________
{
$photo = preg_replace ("` `i","",$photo);
if (file_exists(''.$photo))
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{
$nom_final=preg_replace("`.jpg`is",date("U").".jpg",$photo);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
else
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
{
$nom_final=$photo;
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
}

// on déplace l'image ds le répertoire final
move_uploaded_file($tmp,'jpg/'.$nom_final);
echo "L'image a &eacute;t&eacute; upload&eacute;e avec succ&egrave;s";
//_________________________________________________________________________________________
}
else
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
echo "<br><br><br><br>";
echo "Erreur:";
echo "<br>";
echo "le fichier doit être en format jpg, 800 * 600px max et peser moins de 500Ko!";
echo "<br><br><br><br>";
echo "<a href="/page.php?item=post"><b>back</b></a>";
exit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
/////////////////////////////////////////////////////////////////////////////////////////////
}
$photo="<img src="jpg/$nom_final">";
//--------------------------------------------------------------------------------------------
// création vignettes
$imgname = "jpg/$nom_final";
$vignettes = @imagecreatefromjpeg($imgname); /* Tentative d'ouverture */
if (!$vignettes) { /* Vérification */
$vignettes = imagecreatetruecolor(150, 30); /* Création d'une image blanche */
$bgc = imagecolorallocate($vignettes, 255, 255, 255);
$tc = imagecolorallocate($vignettes, 0, 0, 0);
imagefilledrectangle($vignettes, 0, 0, 150, 30, $bgc);
// Affichage d'un message d'erreur
imagestring($vignettes, 1, 5, 5, "Erreur de chargement de l'image $imgname", $tc);
}
echo $vignettes;
exit;
//--------------------------------------------------------------------------------------------

}

?>



sur mon" echo vignettes" à la fin je n'arrive pas à recupérer le nom de la vignette
j'ai comme erreur : Resource#id8
bref, si vous avez une idée

Merci

F
i M@N
le 11/03/2007 à 20:07
i M@N
Hello.

Je dirais que $imgname = "jpg/$nom_final" n'est pas le chemin exact de l'image : il manque le début du chemin : http://www.site.com/dossier/image.jpg

Trouve ce chemin. Essaye de définir une variable $dossier qui serait le chemin du dossier de destination des images en relatif par rapport à ton script : $dossier = "../jpg/" ou "./jpg/ ...

@+...
One Love, One Heart, One Unity.
LA GLOBULE
le 11/03/2007 à 23:27
LA GLOBULE
C'est normal que ca affiche "Ressource id" vu que c'est le type de données de ta variable $vignettes.

Pour afficher l'image, utilise une fonction comme imagejpeg.

PS : iMan, on ne sait pas si le chemin est bon au faux, mais vu que $vignettes est de type ressource, il y a fort à parier que le chemin est bon.
fausto
le 13/03/2007 à 10:28
fausto
hello,
Merci pour vos réponses,
en fait, je suis parti sur un autre fichier
mon but est d'uploader deux photos sur le serveur (dans deux dossiers)
- la photo "taille normale"
- la miniature créée à partir de la 1ère
(pour ce qui est de créer la miniature et de l'uploader, ça fonctionne, mais je n'arrive pas à uploader dans le même temps la photo "taille normale"
dans un autre dossier)

<?
//Cookies du pseudo
//*****************

$pseudo = $_POST['pseudo'];

//Enregistre le pseudo actuel
if(($pseudo != "")&&($pseudo != "Anonyme"))setcookie ("cookie_rep", $pseudo, time()+3600*24*365); //valable 1 année

//Lecture du pseudo
$cook_rep= $HTTP_COOKIE_VARS["cookie_rep"];
if(!isset($cook_rep))$cook_rep = "Anonyme";
if($pseudo == "")$pseudo = $cook_rep;
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="description" content="Upload de photo avec redimentionnement" />
<title>upload</title>
</head>

<body bgcolor="#FFFFFF"><br>
<p align="center">

<?php
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// création vignettes depuis photo
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//----------------------------
// DEFINITION DES VARIABLES
//----------------------------


$test_local = 0;

$extension = 'image/jpeg';
$quality = 90; // Qualité de la compression JPEG
$kb_max = 70000; // Valeur max en octets de l'image finale
$max_size = 1000000; // Taille max en octets du fichier à uploader pour traitement
$largeurDestination = 150; // Largeur max de l'image finale en pixel
$nom_rep = "nom_du_dossier_miniatures";
$site = "http://".$_SERVER["HTTP_HOST"]."/nom_du_dossier/"; // Adresse du dossier où est installé le script (fin avec /)

//---------------------------------------------
// DEFINITION DES VARIABLES LIEES AUX FICHIERS
//---------------------------------------------

$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
$ext_img = $_FILES['fichier']['type'];
$lien_dossier = $nom_rep;

$verif_exist = $nom_rep;
$verif_exist .= "/";
$verif_exist .= $nom_file;

//----------------------
// SCRIPT D'UPLOAD
//----------------------

//Vérifie l'existance du dossier de réception
//*******************************************
if(!file_exists($lien_dossier))
{
//Crée le répertoire de classement des photos s'il n'existe pas
if(!mkdir($lien_dossier,0755))
{
echo "Impossible de créer le répertoire : ",$lien_dossier," --> upload interrompu!!!";
exit;
}
}

//Enlever les accents
//*******************
function enlever_accents($dest_fichier){
$dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ/',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy/');
//remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z/0-9]+)/i', '_', $dest_fichier);
return $dest_fichier;
}

$nom_rep = enlever_accents($nom_rep);
$pseudo = enlever_accents($pseudo);
$verif_exist = enlever_accents($verif_exist);
$nom_file = enlever_accents($nom_file);

//Début de la procédure d'upload
//******************************
if(!empty($_POST['posted'])) {
// On vérifie si le champ est rempli
if(!empty($nom_file) && (!empty($pseudo))) {
//On vérifie que le nom du fichier n'existe pas
if(!file_exists($verif_exist)) {
// On vérifie l'extension du fichier
if($ext_img == $extension) {
// On récupère les dimensions du fichier
$infos_img = getimagesize($tmp);
// On vérifie la taille de l'image
if($taille <= $max_size) {
//upload du fichier

if(move_uploaded_file($tmp,$nom_rep."/".$nom_file)) {
echo '<b><font color=red>vignette uploadée avec succès !</font></b><br>';

//calcul et redimension
//*********************
$fichierSource = $nom_rep;
$fichierSource .= "/";
$fichierSource .= $nom_file;
$fichierSource = $fichierSource;
//hauteur / largeur
$rapport = $infos_img[1] / $infos_img[0];
//Dimension de sortie
$hauteurDestination = $largeurDestination * $rapport;

//Création de l'image
//*******************
$source = imagecreatefromjpeg($fichierSource);

$largeurSource = imagesx($source);
$hauteurSource = imagesy($source);

if($largeurSource > $largeurDestination){
$im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination)
or die ("Erreur lors de la création de l'image");
}
else{
$im = ImageCreateTrueColor ($infos_img[0], $infos_img[1])
or die ("Erreur lors de la création de l'image");
$largeurDestination = $infos_img[0];
$hauteurDestination = $infos_img[1];
}

//Redimentionnement
//*****************
ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);

//Création du fichier de sortie
//*****************************
$fh=fopen($fichierSource,'w');
fclose($fh);
ImageJpeg ($im,$fichierSource,$quality);
$size_file = filesize($fichierSource);

//Test de la taille en kb de l'image définitive
//*********************************************
$size_file = filesize($fichierSource);
$iteration = 0;
while($size_file > $kb_max){
if($quality > 0)$quality -= 5;
else {$quality = "Erreur!!!"; break;}
unlink($fichierSource);
$fh=fopen($fichierSource,'w');
fclose($fh);
ImageJpeg ($im,$fichierSource,$quality);
$size_file = filesize($fichierSource);
$iteration++;
}

$lien_image = $site.$nom_rep."/".$nom_file;
//echo "L'image ci-dessous a été redimentionnée et chargée sur le serveur";
//echo "Lien de l'image : ".$lien_image."";
echo "<img border='0' src='".$lien_image."'>";
}

}
else {
// Sinon on affiche une erreur système
echo '<font color=red><b><u>ECHEC DE L'ENVOI</u><br><br>Problème lors de l'upload !</b><b>Erreur num : ', $_FILES['fichier']['error'], '</b></font>';
}
} else {
// Sinon on affiche une erreur pour les dimensions et taille de l'image
echo "<b>La taille du fichier dépasse la taille maximale autorisée de $max_size octets!</b>";
}
} else {
// Sinon on affiche une erreur pour l'extension
echo '<font color=red><b><u>ECHEC DE L'ENVOI</u><br><br>Votre image ne comporte pas l'extension .jpg !</b></font>';
}
} else {
//Sinon on demande de renommer
echo '<font color=red><b><u>ECHEC DE L'ENVOI</u><br><br>Une image avec le même nom existe déjà! Renommer la photo et réessayer, Merci.</b></font>';
}
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<font color=red><b><u>ECHEC DE L'ENVOI</u><br><br>Aucune photo sélectionnée ou aucun pseudo entré!</b></font>';
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// FIN création vignettes depuis photo
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

?>


<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<b>Envoyer le fichier :</b>
<input type="hidden" name="posted" value="1" />
<font color="#FFFFFF">Votre pseudo : </font><input name="pseudo" type="text" value="<?php echo $pseudo ?>" size="20" ><br><br>

<font color="#FFFFFF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sélectionner la photo : </font><input name="fichier" id="fichier" type="file"><br><br>
<input type="submit" value="Envoyer la photo" />
</form>


</body>
</html>


si vous avez une idée
Merci à vous

f
vengeur002
le 13/03/2007 à 12:46
vengeur002
salut

Va voir dans les coment faire y a un script qui fais exacteent la meme chose et qui fonctionne

smiley
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours