par
graffx » 16 oct. 2014, 15:58
Bonjour a tous!
Je me permet de vous deranger sur un truc que je n'ai jamais fait et qui du coup me chagrine un peu, le redimensionnement d'image. Je suis en train de faire un petit systeme simple de gestion de bibliotheque (livres) pour ma femme.
J'ai un formulaire qui fonctionne tres bien comme ceci : On rentre le titre, année, auteur, et un fichier qui est la couverture du livre. Ca fonctionne trés bien.
Seconde étape, la ou je bloque, c'est que j'aimerai créer une miniature de 200px de haut de cette couverture.
La photo originale se trouve dans le dossier /img/ tandis que j'aimerai redimensionner et uploader une copie de cette image dans /min/ qui se situe au meme niveau que /img/
Voici le formulaire qui fonctionne trés bien avant mon probleme et le second avec une tentative de copie, de redimensionnement et d'upload qui ne marche pas.
<?php
session_start();
include ('config.php');
mysql_query("SET NAMES 'utf8'");
$titre = $_POST['titre'];
$auteur = $_POST['auteur'];
$annee = $_POST['annee'];
$resume = $_POST['resume'];
$photo = $_FILES['photo'];
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$photo = !empty($_FILES['photo']['name']) ? time()."_".$_FILES['photo']['name'] : '';
$extension = strrchr($_FILES['photo']['name'], '.');
$dossier = '/home/monsite/www/biblix/img/';
//On formate le nom du fichier ici...
$photo = strtr($photo,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$photo = preg_replace('/([^.a-z0-9]+)/i', '-', $photo);
move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $photo); //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
mysql_query("INSERT INTO biblix VALUES('', '$titre', '$auteur', '$annee', '$photo', '$photo2')")or die(mysql_error());
mysql_close();
?>
<meta http-equiv="Refresh" content="0;URL=add.php" />
<?php
session_start();
include ('config.php');
mysql_query("SET NAMES 'utf8'");
$titre = $_POST['titre'];
$auteur = $_POST['auteur'];
$annee = $_POST['annee'];
$resume = $_POST['resume'];
$photo = $_FILES['photo'];
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$photo = !empty($_FILES['photo']['name']) ? time()."_".$_FILES['photo']['name'] : '';
$extension = strrchr($_FILES['photo']['name'], '.');
$dossier = '/home/monsite/www/biblix/img/';
//On formate le nom du fichier ici...
$photo = strtr($photo,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$photo = preg_replace('/([^.a-z0-9]+)/i', '-', $photo);
move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $photo); //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
$photo2 = $photo;
$new_value = "200";
function RedimensionnerImage($photo2, $type_value = "H", $new_value, $compression = 70, $sortie = "/home/monsite/www/biblix/min/") {
/*
Récupération des dimensions de l'image afin de vérifier
que ce fichier correspond bel et bien à un fichier image.
Stockage dans deux variables le cas échéant.
*/
if( !( list($source_largeur, $source_hauteur) = @getimagesize($source) ) ) {
return false;
}
/*
Calcul de la valeur dynamique en fonction des dimensions actuelles
de l'image et de la dimension fixe que nous avons précisée en argument.
*/
if( $type_value == "H" ) {
$nouv_hauteur = $new_value;
$nouv_largeur = ($new_value / $source_hauteur) * $source_largeur;
} else {
$nouv_largeur = $new_value;
$nouv_hauteur = ($new_value / $source_largeur) * $source_hauteur;
}
/*
Création du conteneur, c'est-à-dire l'image qui va contenir la version
redimensionnée. Elle aura donc les nouvelles dimensions.
*/
$image = imagecreatetruecolor($nouv_largeur, $nouv_hauteur);
/*
Importation de l'image source. Stockage dans une variable pour pouvoir
effectuer certaines actions.
*/
$source_image = imagecreatefromstring(file_get_contents($source));
/*
Copie de l'image dans le nouveau conteneur en la rééchantillonant. Ceci
permet de ne pas perdre de qualité.
*/
imagecopyresampled($image, $source_image, 0, 0, 0, 0, $nouv_largeur, $nouv_hauteur, $source_largeur, $source_hauteur);
/*
Si nous avons spécifié une sortie et qu'il s'agit d'un chemin valide (accessible
par le script)
*/
if(strlen($sortie) > 0 and @touch($sortie)) {
/*
Enregistrement de l'image et affichage d'une notification à l'utilisateur.
*/
imagejpeg($image, $sortie, $compression);
echo "Fichier sauvegardé.";
/*
Sinon...
*/
} else {
/*
...Nous indiquons au navigateur que nous affichons une image en définissant le
header et nous affichons l'image.
*/
header("Content-Type: image/jpeg");
imagejpeg($image, NULL, $compression);
}
}
mysql_query("INSERT INTO biblix VALUES('', '$titre', '$auteur', '$annee', '$photo', '$photo2')")or die(mysql_error());
mysql_close();
?>
<meta http-equiv="Refresh" content="0;URL=add.php" />
Le probleme est que je ne sais pas comment décéler les erreurs :/
Si vous aviez des conseils ca serait super!
Merci d'avance!
Bonjour a tous!
Je me permet de vous deranger sur un truc que je n'ai jamais fait et qui du coup me chagrine un peu, le redimensionnement d'image. Je suis en train de faire un petit systeme simple de gestion de bibliotheque (livres) pour ma femme.
J'ai un formulaire qui fonctionne tres bien comme ceci : On rentre le titre, année, auteur, et un fichier qui est la couverture du livre. Ca fonctionne trés bien.
Seconde étape, la ou je bloque, c'est que j'aimerai créer une miniature de 200px de haut de cette couverture.
La photo originale se trouve dans le dossier /img/ tandis que j'aimerai redimensionner et uploader une copie de cette image dans /min/ qui se situe au meme niveau que /img/
Voici le formulaire qui fonctionne trés bien avant mon probleme et le second avec une tentative de copie, de redimensionnement et d'upload qui ne marche pas.
[php]<?php
session_start();
include ('config.php');
mysql_query("SET NAMES 'utf8'");
$titre = $_POST['titre'];
$auteur = $_POST['auteur'];
$annee = $_POST['annee'];
$resume = $_POST['resume'];
$photo = $_FILES['photo'];
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$photo = !empty($_FILES['photo']['name']) ? time()."_".$_FILES['photo']['name'] : '';
$extension = strrchr($_FILES['photo']['name'], '.');
$dossier = '/home/monsite/www/biblix/img/';
//On formate le nom du fichier ici...
$photo = strtr($photo,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$photo = preg_replace('/([^.a-z0-9]+)/i', '-', $photo);
move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $photo); //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
mysql_query("INSERT INTO biblix VALUES('', '$titre', '$auteur', '$annee', '$photo', '$photo2')")or die(mysql_error());
mysql_close();
?>
<meta http-equiv="Refresh" content="0;URL=add.php" />[/php]
[php]<?php
session_start();
include ('config.php');
mysql_query("SET NAMES 'utf8'");
$titre = $_POST['titre'];
$auteur = $_POST['auteur'];
$annee = $_POST['annee'];
$resume = $_POST['resume'];
$photo = $_FILES['photo'];
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$photo = !empty($_FILES['photo']['name']) ? time()."_".$_FILES['photo']['name'] : '';
$extension = strrchr($_FILES['photo']['name'], '.');
$dossier = '/home/monsite/www/biblix/img/';
//On formate le nom du fichier ici...
$photo = strtr($photo,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$photo = preg_replace('/([^.a-z0-9]+)/i', '-', $photo);
move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $photo); //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
$photo2 = $photo;
$new_value = "200";
function RedimensionnerImage($photo2, $type_value = "H", $new_value, $compression = 70, $sortie = "/home/monsite/www/biblix/min/") {
/*
Récupération des dimensions de l'image afin de vérifier
que ce fichier correspond bel et bien à un fichier image.
Stockage dans deux variables le cas échéant.
*/
if( !( list($source_largeur, $source_hauteur) = @getimagesize($source) ) ) {
return false;
}
/*
Calcul de la valeur dynamique en fonction des dimensions actuelles
de l'image et de la dimension fixe que nous avons précisée en argument.
*/
if( $type_value == "H" ) {
$nouv_hauteur = $new_value;
$nouv_largeur = ($new_value / $source_hauteur) * $source_largeur;
} else {
$nouv_largeur = $new_value;
$nouv_hauteur = ($new_value / $source_largeur) * $source_hauteur;
}
/*
Création du conteneur, c'est-à-dire l'image qui va contenir la version
redimensionnée. Elle aura donc les nouvelles dimensions.
*/
$image = imagecreatetruecolor($nouv_largeur, $nouv_hauteur);
/*
Importation de l'image source. Stockage dans une variable pour pouvoir
effectuer certaines actions.
*/
$source_image = imagecreatefromstring(file_get_contents($source));
/*
Copie de l'image dans le nouveau conteneur en la rééchantillonant. Ceci
permet de ne pas perdre de qualité.
*/
imagecopyresampled($image, $source_image, 0, 0, 0, 0, $nouv_largeur, $nouv_hauteur, $source_largeur, $source_hauteur);
/*
Si nous avons spécifié une sortie et qu'il s'agit d'un chemin valide (accessible
par le script)
*/
if(strlen($sortie) > 0 and @touch($sortie)) {
/*
Enregistrement de l'image et affichage d'une notification à l'utilisateur.
*/
imagejpeg($image, $sortie, $compression);
echo "Fichier sauvegardé.";
/*
Sinon...
*/
} else {
/*
...Nous indiquons au navigateur que nous affichons une image en définissant le
header et nous affichons l'image.
*/
header("Content-Type: image/jpeg");
imagejpeg($image, NULL, $compression);
}
}
mysql_query("INSERT INTO biblix VALUES('', '$titre', '$auteur', '$annee', '$photo', '$photo2')")or die(mysql_error());
mysql_close();
?>
<meta http-equiv="Refresh" content="0;URL=add.php" />[/php]
Le probleme est que je ne sais pas comment décéler les erreurs :/
Si vous aviez des conseils ca serait super!
Merci d'avance!