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

Résolu/Fermé
Signaler
Messages postés
64
Date d'inscription
mardi 11 août 2015
Statut
Membre
Dernière intervention
25 novembre 2019
-
Messages postés
23187
Date d'inscription
samedi 22 octobre 2005
Statut
Modérateur
Dernière intervention
28 novembre 2021
-
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 !

2 réponses

Messages postés
1769
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
19 novembre 2016
259
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?
Messages postés
64
Date d'inscription
mardi 11 août 2015
Statut
Membre
Dernière intervention
25 novembre 2019

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
Messages postés
1769
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
19 novembre 2016
259 >
Messages postés
64
Date d'inscription
mardi 11 août 2015
Statut
Membre
Dernière intervention
25 novembre 2019

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).
Messages postés
64
Date d'inscription
mardi 11 août 2015
Statut
Membre
Dernière intervention
25 novembre 2019

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.
Messages postés
64
Date d'inscription
mardi 11 août 2015
Statut
Membre
Dernière intervention
25 novembre 2019

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
Messages postés
64
Date d'inscription
mardi 11 août 2015
Statut
Membre
Dernière intervention
25 novembre 2019

Quelqu'un peut m'aider s'il vous plait!

Merci!
Messages postés
64
Date d'inscription
mardi 11 août 2015
Statut
Membre
Dernière intervention
25 novembre 2019

Bonjour à tous,
j'ai trouvée la solution.

Bonne Fin d'année!
Messages postés
23187
Date d'inscription
samedi 22 octobre 2005
Statut
Modérateur
Dernière intervention
28 novembre 2021
2 293
ah oui, ben tant pieux ET quelle est-elle, ce serait bien d'en faire profiter tout le monde ;)