8768 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis donc nouveau et ayant entendu parler de Alsa comme un trés bon forum, je viens pour vous demandez de l'aide sur un code PHP que voici :

<?php

$album = $_POST['alb'];
$categorie = $_POST['categorie'];
$image = $_POST['image'];
$description = addslashes($_POST['description']);

$limite = "40";

include('../connect.php');
$req=mysql_query("SELECT nom FROM images ORDER BY nom DESC LIMIT 0,1 ");
$array=mysql_fetch_array($req);
if ( $array['nom'] == '' ) { $nom='1001'; }
else { $nom=$array['nom']+1; }

mysql_query("INSERT INTO images VALUES ('','$album','$categorie','$nom','$description') ");

$nom=$nom.".jpg";

$repertoire="../".$album."/".$categorie;
$rep_mini="../".$album."/".$categorie."/miniatures";

move_uploaded_file($_FILES['image']['tmp_name'], $repertoire."/".$nom);

$size = getimagesize($repertoire."/".$nom);
$largeur=$size['0'];
$hauteur=$size['1'];  

if ( $largeur > 10 ) {
$coef=$largeur/$limite;
$largeur=$largeur/$coef;
$hauteur=$hauteur/$coef;
}

if ( $hauteur > 10 ) {
$coef=$hauteur/$limite;
$hauteur=$hauteur/$coef;
$largeur=$largeur/$coef;
}

$img_in = imagecreatefromjpeg($repertoire."/".$nom);
$img_out = imagecreatetruecolor($largeur, $hauteur);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
imagejpeg($img_out, $rep_mini."/".$nom);
imagedestroy($img_out);

?>
<SCRIPT LANGUAGE='JavaScript'>document.location.href='ajout_img.php?up=oui'</SCRIPT>


Donc ce code permet d'envoyer l'image en taille original dans un repertoire, et de redimensionner la meme image pour en faire une miniature dans un autre répertoire.
Je souhaiterai simplement que la grande image soit elle aussi redimensionner , a la place d'envoyer l'image en taille original, on l'envoi avec une taille pré-défini (comme pour la miniature).

J'ai essayer plusieurs de fois de decrypter le code, mais sans grand succes malheuresement... J'espere que vous pourrez m'aider Smiley cligne

Merci d'avance Smiley ravi
Modifié par paltox (03 Jul 2007 - 19:20)
Salut paltox Smiley cligne ,

<?php
[b][#blue]ici, on reçoit les variables du formulaire d'appel en méthode POST[/#][/b]
$album = $_POST['alb'];
$categorie = $_POST['categorie'];
$image = $_POST['image'];
$description = addslashes($_POST['description']);

[b][#blue]on donne à la variable $limite la valeur 40[/#][/b]
$limite = "40";

[b][#blue]on se connecte à la base et on récupère dans la table images le dernier 
identifiant auquel on ajoute 1 pour alimenter la variable $nom. 
Si c'est la première fois on lui donne la valeur 1001.[/#][/b]
include('../connect.php');
$req=mysql_query("SELECT nom FROM images ORDER BY nom DESC LIMIT 0,1 ");
$array=mysql_fetch_array($req);
if ( $array['nom'] == '' ) { $nom='1001'; }
else { $nom=$array['nom']+1; }

[b][#blue]on insère un nouvel enregistrement dans la table avec les valeurs précédentes.[/#][/b]
mysql_query("INSERT INTO images VALUES ('','$album','$categorie','$nom','$description') ");

[b][#blue]on ajoute l'extension .jpg à la variable $nom.
Par exemple 1001 devient 1001.jpg[/#][/b]
$nom=$nom.".jpg";

[b][#blue]En fonction des variables $album et $categorie on détermine le nom des répertoire pour l'image normale et pour la miniature[/#][/b]
$repertoire="../".$album."/".$categorie;
$rep_mini="../".$album."/".$categorie."/miniatures";

[b][#blue]on déplace l'image normale (qui a été placée dans un répertoire temporaire 
par la méthode de l'input file) dans le premier répertoire.[/#][/b]
move_uploaded_file($_FILES['image']['tmp_name'], $repertoire."/".$nom);

[b][#blue]on récupère sa taille (largeur et hauteur) en pixels[/#][/b]
$size = getimagesize($repertoire."/".$nom);
$largeur=$size['0'];
$hauteur=$size['1'];  

[b][#blue]Si la largeur est supérieure à 10 on cherche le coefficient à appliquer pour
déterminer les dimensions de la miniature en fonction de la variable $limite :
Par exemple largeur = 80, hauteur = 160, limite = 40 --> coef = 80 / 40 = 2.
Nouvelle largeur de la miniature = 40
Nouvelle hauteur de la miniature = 80.[/#][/b]
if ( $largeur > 10 ) {
$coef=$largeur/$limite;
$largeur=$largeur/$coef;
$hauteur=$hauteur/$coef;
}

[b][#blue]Si la hauteur est supérieure à 10 on refait la même chose :
largeur = 40, hauteur = 80, limite = 40 --> coef = 80 / 40 = 2.
Nouvelle hauteur de la miniature = 40
Nouvelle largeur de la miniature = 20.[/#][/b]
if ( $hauteur > 10 ) {
$coef=$hauteur/$limite;
$hauteur=$hauteur/$coef;
$largeur=$largeur/$coef;
}

[b][#blue]on créé la miniature (nouvelles largeurs et hauteur) dans le répertoire déterminé pour les miniatures 
depuis l'image normale.[/#][/b]
$img_in = imagecreatefromjpeg($repertoire."/".$nom);
$img_out = imagecreatetruecolor($largeur, $hauteur);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
imagejpeg($img_out, $rep_mini."/".$nom);
imagedestroy($img_out);

?>

Pour ce que tu veux faire il faut donc appliquer la même technique en utilisant par exemple une variable $limite_haute = 100.
Dans cet exemple (non testé Smiley langue ) il faut créer un répertoire temp au même niveau que tes répertoires d'album :
<?php
$album = $_POST['alb'];
$categorie = $_POST['categorie'];
$image = $_POST['image'];
$description = addslashes($_POST['description']);

$limite = "40";
$limite_haute = 100; // on fixe une taille maxi pour les images normales

include('../connect.php');
$req=mysql_query("SELECT nom FROM images ORDER BY nom DESC LIMIT 0,1 ");
$array=mysql_fetch_array($req);
if ( $array['nom'] == '' ) { $nom='1001'; }
else { $nom=$array['nom']+1; }

mysql_query("INSERT INTO images VALUES ('','$album','$categorie','$nom','$description') ");

$nom=$nom.".jpg";

$repertoire="../".$album."/".$categorie;
$rep_mini="../".$album."/".$categorie."/miniatures";
$repertoire_temp = "../temp"; // il faudra créer un répertoire temp au même niveau que les répertoires albums

// on déplace l'image normale dans le répertoire temp
move_uploaded_file($_FILES['image']['tmp_name'], $repertoire_temp."/".$nom);

$size = getimagesize($repertoire_temp."/".$nom);
$largeur=$size['0'];
$hauteur=$size['1'];  

if ( $largeur > $limite_haute ) {
$coef=$largeur/$limite_haute;
$largeur=$largeur/$coef;
$hauteur=$hauteur/$coef;
}

if ( $hauteur > $limite_haute ) {
$coef=$hauteur/$limite_haute;
$hauteur=$hauteur/$coef;
$largeur=$largeur/$coef;
}

$img_in = imagecreatefromjpeg($repertoire_temp."/".$nom);
$img_out = imagecreatetruecolor($largeur, $hauteur);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
imagejpeg($img_out, $repertoire."/".$nom);
imagedestroy($img_out);

// on supprime le fichier du répertoire temp
unlink($repertoire_temp."/".$nom);

// on reprends le cours normal des opérations...
$size = getimagesize($repertoire."/".$nom);
$largeur=$size['0'];
$hauteur=$size['1'];  

if ( $largeur > 10 ) {
$coef=$largeur/$limite;
$largeur=$largeur/$coef;
$hauteur=$hauteur/$coef;
}

if ( $hauteur > 10 ) {
$coef=$hauteur/$limite;
$hauteur=$hauteur/$coef;
$largeur=$largeur/$coef;
}

$img_in = imagecreatefromjpeg($repertoire."/".$nom);
$img_out = imagecreatetruecolor($largeur, $hauteur);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
imagejpeg($img_out, $rep_mini."/".$nom);
imagedestroy($img_out);
?>

A+
Whoa tu es génial (j'ai bien fait de venir ici Smiley langue )
Je vais tester ca dés que j'aurais fini de faire le ménage (on ne rit pas !)
Encore merci pour toutes les explications, je teste et je reviens pour te dire comment ca c'est passé Smiley cligne