redimensionner une image

Eléphant du PHP | 271 Messages

16 janv. 2006, 02:13

Bonsoir,

Tout dabord je remercie Cyrano de l'aide mais j'ai eu beaucoup de difficultés avec le script qu'il m'a proposé (je ne maitrise pas autant que lui) et je préfére me "rabattre" sur un script plus concis. Néanmoins j'ai quelques soucis que je n'arrive pas à résoudre.

Je souhaite que la miniature s'enregistre dans le dossier "minimag". Actuellement elle s'enregistre dans le répertoire racine.
Comment faut - il écrire le chemin ?
<? imagejpeg($destination, "minimag/"$_FILES['photo']['name']);?>
Mon 2ème soucis; la miniature s'affiche toute noire?
Voici le script en entier
<BODY><?php 

// je réceptionne le formulaire et indique le répertoire de destination//
if(isset($_FILES['photo'])){  $dest_dossier = 'imag/';  
//paramétre//
unset($erreur);  
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); 
 $taille_max = 1000000;
// vérifications
  if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
  {
    $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';  
  }
  elseif( file_exists($_FILES['photo']['tmp_name']) 
          and filesize($_FILES['photo']['tmp_name']) > $taille_max)
  {
    $erreur = 'Votre fichier doit faire moins de 500Ko !';
  }
  if(!isset($erreur))
  {
// il est copié du temporaire vers mon répertoire//
 $dest_fichier = basename($_FILES['photo']['name']); 
 // formatage nom fichier
    // enlever les accents
    $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    // remplacer les caracteres autres que lettres, chiffres et point par _
    $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
?>
<?php 
    //Redimensionne l'image
$source = imagecreatefromjpeg($_FILES['photo']['name']); // La photo est la source
$destination = imagecreatetruecolor(200, 150); // 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 dans le dossier
imagejpeg($destination, $_FILES['photo']['name']);

  move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
  }
  }

?>
<?
 require("config.php");
	$mysql_link =  MYSQL_CONNECT("$localhost","$login","$mot") OR DIE("Unable to connect to database !!");
	@mysql_select_db($dbName ,$mysql_link ) or die( "Unable to select database ??");
//je réceptionne le nom du fichier et son chemin//
if(isset($_FILES['photo']['name']))      $FILES=$_POST['url'];

else      $_FILES="";


// je l'écris dans le champ chemin_fichier//
	
	$sql = "INSERT INTO imag(url,chemin_fichier) VALUES('". $imag ."', '". $dest_dossier . $dest_fichier ."')";
	
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

	mysql_query("SELECT * FROM $url");

// Redirection vers une page 
header('URL=exemple.php'); 
?>
</body>
</html>
Si quelqu'un peut m'aider. Merci d'avance.
Patience et obstination sont des qualités !

Mammouth du PHP | 1776 Messages

16 janv. 2006, 02:30

Bonsoir,
<? imagejpeg($destination, "minimag/"$_FILES['photo']['name']);?> 
En php, pour concaténer des données (textes et variables) on utilise un point. Ta ligne n'est donc actuellement pas correcte:
<? imagejpeg($destination, "minimag/".$_FILES['photo']['name']);?> 
serait plus judicieux.

Pour ce qui est de l'envoi d'image, il serait plus politiquement correct de les nommer toi même... que se passera t'il à ton avis si une image du mêm nom existe dans le repértoire ? :roll:

Eléphant du PHP | 271 Messages

16 janv. 2006, 12:11

Merci de l'aide et comme vous pouvez le constater j'ai modifié.

L'autre soucis est : ma miniature s'affiche toute noire ???
<?php 

// je réceptionne le formulaire et indique le répertoire de destination//
if(isset($_FILES['photo'])){  $dest_dossier = 'imag/';  
//paramétre//
unset($erreur);  
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); 
 $taille_max = 1000000;
// vérifications
  if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
  {
    $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';  
  }
  elseif( file_exists($_FILES['photo']['tmp_name']) 
          and filesize($_FILES['photo']['tmp_name']) > $taille_max)
  {
    $erreur = 'Votre fichier doit faire moins de 500Ko !';
  }
  if(!isset($erreur))
  {
// il est copié du temporaire vers mon répertoire//
 $dest_fichier = basename($_FILES['photo']['name']); 
 // formatage nom fichier
    // enlever les accents
    $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    // remplacer les caracteres autres que lettres, chiffres et point par _
    $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
?>
<?php 
    //Redimensionne l'image
$source = imagecreatefromjpeg($_FILES['photo']['name']); // La photo est la source
$destination = imagecreatetruecolor(200, 150); // 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);
imagejpeg($destination, null, 100);
// On enregistre la miniature dans le dossier
imagejpeg($destination, $_FILES['photo']['name']);
rename($_FILES['photo']['name'], "imag/minimag/newphoto.jpeg");

  move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
  }
  }

?>
<?
 require("config.php");
	$mysql_link =  MYSQL_CONNECT("$localhost","$login","$mot") OR DIE("Unable to connect to database !!");
	@mysql_select_db($dbName ,$mysql_link ) or die( "Unable to select database ??");
//je réceptionne le nom du fichier et son chemin//
if(isset($_FILES['photo']['name']))      $FILES=$_POST['url'];

else      $_FILES="";


// je l'écris dans le champ chemin_fichier//
	
	$sql = "INSERT INTO imag(url,chemin_fichier) VALUES('". $imag ."', '". $dest_dossier . $dest_fichier ."')";
	
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

	mysql_query("SELECT * FROM $url");

// Redirection vers une page 
header('URL=exemple.php'); 
?>
Merci d'avance de l'aide
Patience et obstination sont des qualités !

VaN
Mammouth du PHP | 1107 Messages

16 janv. 2006, 19:03

Jette peut-etre un coup d'oeil du coté de la fonction imagecreatetruecolor() de ton code. Refait une manip sans cette fonction même.

Regarde aussi peut etre au moment où tu specifie la qualité de l'image, essaie différente qualité.

Eléphant du PHP | 271 Messages

16 janv. 2006, 19:45

Merci de m'aider.

J'ai essayé sans imagecreatetruecolor() et imagecreate() j'ai toujours une image noire.
En ce qui concerne la qualité, ou dois -je la spécifier ? Je croyais que imagecreatetruecolor() gérait les couleurs > à 256
Patience et obstination sont des qualités !