PHP conversion image avant de l'inserer dans la base de donnée

Résolu/Fermé
lerod83 Messages postés 64 Date d'inscription mardi 11 août 2015 Statut Membre Dernière intervention 25 novembre 2019 - Modifié par lerod83 le 23/09/2015 à 09:32
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 - 31 déc. 2015 à 12:06
Bonjour à tous,

A l'aide s'il vous plait!

Je veux, lors de l'envoie d'un formulaire, convertir les images uploader par l'utilisateur.

Ce que j'ai en ce moment :
1- Un script formulaire
2- Script PHP pour récupération des $_POST et $_FILES pour insérer dans une base de donnée.
3- Fonction de conversion GD PHP

Ce que je voudrais faire :
- Convertir l'image avant de les sauvegarder dans un dossier spécifique avec lequel la base de donnée se relie.
- Cette conversion concerne la taille et la qualité comme je vais vou le montrer sur les script ci-dessous.
- Comment introduire cette fonction converImage dans l'Extract $_POST ?
- Si vous avez aussi l'idée de l'appliquer sur le format GIF et PNG. Je n'ai pas encore essayé mais si vous voulez l'aborder ce sera mieux !



FONCTION convertImage

convertImage('original/img212.jpg', 'final/img212.jpg', '640', '480', '100');
//original est le dossier qui content l'image source
//final c'est pour la destination de l'image redimensionnée

function convertImage($sources, $dest, $width, $height, $quality){
$imageSize = getimagesize($sources);
$imageRessource = imagecreatefromjpeg($sources);
$imageFinal = imagecreatetruecolor($width,$height);
$final = imagecopyresampled($imageFinal, $imageRessource, 0, 0, 0, 0, $width, $height, $imageSize[0], $imageSize[1]);
imagejpeg($imageFinal, $dest, $quality);
}



SCRIPT FORMULAIRE

<div class = 'saryTambatra'>
<form method = "POST" action="" enctype="multipart/form-data">

<table class='tabForm'>

<tr>
<td class='nomArticle'>Nom de l'article :</td>
<td><input type='text' class='inputArticle' name = 'nomAricle'></td>
</tr>

<tr>
<td class="titrePrix">Prix:</td>
<td class='inputPrix'><input type="texte" class="prixArticle" name="prixArticle"></td>
</tr>

<tr>
<td class='titreDescrArticle'>Description :</td>
<td><textarea type='text' class='descrArticle' name = 'descrArticle'></textarea></td>
</tr>

</table><br/>

<div class="saryTambatra">
<p class='img1'>Image n°01</p>
<input type="file" class="upload1" name="image1" /><br/>

<p class='img2'>Image n°02</p>
<input type="file" class="upload2" name="image2" /><br/>

<p class='img3'>Image n°03</p>
<input type="file" class="upload3" name="image3" />
</div><br/>

<input type = 'submit' name = 'subArticle' value = 'Ajouter'>

</form>
</div>




SCRIPT S_POST / $_FILES

<?php
session_start();

require_once("include/connexion.php");

if(isset($_POST['subArticle'])){

extract($_POST);
$nomArt = $_POST['nomAricle'];
$prixArt = $_POST['prixArticle'];
$descrArt = $_POST['descrArticle'];
$idmbr =$_POST['id_membre'];
$pseudo = $_SESSION['pseudo'];


$image1 = $_FILES["image1"]["name"];
$image2 = $_FILES["image2"]["name"];
$image3 = $_FILES["image3"]["name"];

$file_tmp_img1 = $_FILES["image1"]["tmp_name"];
$file_tmp_img2 = $_FILES["image2"]["tmp_name"];
$file_tmp_img3 = $_FILES["image3"]["tmp_name"];

move_uploaded_file($file_tmp_img1,"images/articles/$image1");
move_uploaded_file($file_tmp_img2,"images/articles/$image2");
move_uploaded_file($file_tmp_img3,"images/articles/$image3");

$query = $con_db->prepare(
'INSERT INTO articleboutik(
pseudo,
nomArt,
prixArt,
descrArt,
saryArt1,
saryArt2,
saryArt3
)
VALUES(
:pseudo,
:nomAricle,
:prixArticle,
:descrArticle,
:image1,
:image2,
:image3
)
');
$query->bindParam(':id_membre',$idmbr, PDO::PARAM_STR);
$query->bindParam(':pseudo',$pseudo, PDO::PARAM_STR);
$query->bindParam(':nomAricle',$nomArt, PDO::PARAM_STR);
$query->bindParam(':prixArticle',$prixArt, PDO::PARAM_STR);
$query->bindParam(':descrArticle',$descrArt, PDO::PARAM_STR);
$query->bindParam(':image1',$image1, PDO::PARAM_STR);
$query->bindParam(':image2',$image2, PDO::PARAM_STR);
$query->bindParam(':image3',$image3, PDO::PARAM_STR);
$query->execute();

header ('location: index.php');

}


Comptant sur vôtres précieuses aides.
Merci d'avance !
A voir également:

2 réponses

gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
23 sept. 2015 à 13:44
Bonjour,

Pour résumer et être sûr d'avoir compris, ce que tu veux c'est modifier la taille des images et les convertir dans un format particulier?

Si oui, regarde du côté des fonctions php GD imagecreatefromgif, imagecreatefromjpeg imagecreatefrompng et imagecopyresized.

C'est bien ce que tu recherches?
0
lerod83 Messages postés 64 Date d'inscription mardi 11 août 2015 Statut Membre Dernière intervention 25 novembre 2019
23 sept. 2015 à 14:01
Bonsoir,
D'abord merci pour votre reponse.

Vous voyez,
Ce que je cherche c'est lorsqu'un utilisateur valider le formulaire, c'est à dire les information qu'il entre y compris les images. Je veux que que quelque soit la taille de ses image, je veux les reduire à un format quelconque avant de les "move_uploaded_file" .

Si vous pouvez regarder mes script, j'ai une fonction de conversion qui marche bien (je l'ai déjà testé hors de cette formulaire) et je me demande: comment l'introduire à la recupération des $_POST ou plus précisement $_FILES parce qu'il s'git d'une image. Et tout cela avant de les stocker dans le dossier de destination(move_uploaded_file/...)

Je ne veux pas modifier leur extention (jpeg, png, gif), non!

Merci.
Cordialement.

Lerod
0
gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264 > lerod83 Messages postés 64 Date d'inscription mardi 11 août 2015 Statut Membre Dernière intervention 25 novembre 2019
Modifié par gardiendelanuit le 23/09/2015 à 14:32
Dans ce cas tu peux utiliser les variables $file_tmp_imgX comme chemin source de l'image que tu veux modifier pour ensuite l'enregistrer où tu veux.

Par contre je crois que $_FILES['mon_image']['tmp_name'] te retourne uniquement le nom de l'image temporaire stockée sur le serveur, pas son chemin complet.
Utilise
$tmp_filepath = sys_get_temp_dir() . $_FILES['mon_image']['tmp_name']
convertImage($tmp_filepath, 'final/'.$_FILES['mon_image']['name'], '640', '480', '100');

dans ce cas, mais je recommande vivement d'utiliser un nom que tu mets toi même pour l'image de sortie pour éviter les collisions.
Du style
$_FILES['mon_image']['name'].md5($_FILES['mon_image']['name']).$ext;
par exemple (avec $ext l'extension que ton fichier de sortie).
0
lerod83 Messages postés 64 Date d'inscription mardi 11 août 2015 Statut Membre Dernière intervention 25 novembre 2019
23 sept. 2015 à 14:57
Merci beaucoup!

Je vais les tester ce soir parce que je suis encore au bureau et je vous donnerai un retour demain.

Ecore merci et bonne cintinuation.
0
lerod83 Messages postés 64 Date d'inscription mardi 11 août 2015 Statut Membre Dernière intervention 25 novembre 2019
Modifié par baladur13 le 24/09/2015 à 13:37
Bonjour,

J'ai fais comme vous m'avez conseillé, mais il y a encore d'erreurs!

Voila ce qui se passe:

L'image a bien été redimensionnée à taille 640*480 et stocké dans le dossier "final" MAIS il n'y a que de fond noir, elle a la même extension que l'image uploadé (.jpg).
Et quelques messages d'erreurs:

Warning: getimagesize: failed to open stream: Invalid argument
Warning: imagecreatefromjpeg: failed to open stream: Invalid argument
Warning: imagecopyresampled: failed to open stream: Invalid argument

Ci bas le script:




<!--formulaire-->

<?php


if(isset($_POST['subArticle'])){

        extract($_POST);
                     $nomArt = $_POST['nomAricle'];
                     $prixArt = $_POST['prixArticle'];
                     $descrArt = $_POST['descrArticle'];
                    
                    
                 $image1 = $_FILES["image1"]["name"];
                    
                 $file_tmp_img1 = $_FILES["image1"]["tmp_name"];
                    
                 $tmp_filepath = sys_get_temp_dir() . $_FILES['image1']['tmp_name'];
                    
                

        function convertImage($sources, $dest, $width, $height, $quality){
            $imageSize = getimagesize($sources);
            $imageRessource = imagecreatefromjpeg($sources); 
            $imageFinal = imagecreatetruecolor($width,$height);
            $final = imagecopyresampled($imageFinal, $imageRessource, 0, 0, 0, 0, $width, $height, $imageSize[0], $imageSize[1]);
            imagejpeg($imageFinal, $dest, $quality);
        }
        
        
        convertImage($tmp_filepath, 'final/'.$_FILES['image1']['name'], '640', '480', '100');
}
?>

EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.


En attendant impatiemment votre reponses.

Merci. et bonne journée

Cordialement
0
lerod83 Messages postés 64 Date d'inscription mardi 11 août 2015 Statut Membre Dernière intervention 25 novembre 2019
24 sept. 2015 à 16:16
Quelqu'un peut m'aider s'il vous plait!

Merci!
0
lerod83 Messages postés 64 Date d'inscription mardi 11 août 2015 Statut Membre Dernière intervention 25 novembre 2019
31 déc. 2015 à 09:01
Bonjour à tous,
j'ai trouvée la solution.

Bonne Fin d'année!
0
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
31 déc. 2015 à 12:06
ah oui, ben tant pieux ET quelle est-elle, ce serait bien d'en faire profiter tout le monde ;)
0