probleme de ratio

Répondre
vengeur002
le 26/02/2007 à 12:43
vengeur002
Me revoila

j utilise une portion de code du comment faire Un script de galerie photos (miniatures)
mon soucis est le suivant

$ratio = 150; correspond au ratio en hauteur or j aurai besoin moi d'utiliser le ratio en largeur
en effet mes image seront l une en dessous de l autre et non l une a cote de l autre

quelqu un pourrait t il m eclairer?

merci d avance
vengeur002
le 26/02/2007 à 12:44
vengeur002
Je precise j crois que c est pas assez clair

quand on cree la miniature je voudrai que sa largeur soit de 150 et non sa hauteur
jocker
le 26/02/2007 à 17:23
jocker
alors tu dois regarder si ton image est en hauteur ou en largeur.

Si largeur > hauteur alors ton ratio va être modifié.

si tu veux une largeur de 150px

ton ratio est $largeur/150px et apres tu appliques ton coeff.

Je sais pas si j'ai été très clair ?

++
vengeur002
le 26/02/2007 à 19:33
vengeur002
euh... non g rien compris la mon code est le suivant
<?php
session_start();
if (!isset($_SESSION['login'])) {
header ('Location: inscription.php');
exit();
}


if (isset($_POST['Annoncer']) && $_POST['Annoncer'] == 'Annoncer') {
if ((isset($_POST['genre']) && !empty($_POST['genre']))
&& (isset($_POST['produit']) && !empty($_POST['produit']))
&& (isset($_POST['description']) && !empty($_POST['description']))
&& (isset($_POST['departement']) && !empty($_POST['departement']))
&& (isset($_POST['prix']) && !empty($_POST['prix'])))
{
// on défini le répertoire où sont stockées les images de grande taille
$dir = 'pics';
// on défini le répertoire où seront stockées les miniatures
$dir_mini = 'mini';
// on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels). En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels, soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).
$ratio = 150;

// on teste si le formulaire permettant d'uploader un fichier a été soumis
if (isset($_POST['Annoncer'])) {
// on teste si le champ permettant de soumettre un fichier est vide ou non
if (empty($_FILES['mon_image']['tmp_name'])) {
// si oui, on affiche un petit message d'erreur
$erreur2 = 'mais aucune photo n\'y est associé.';
$photo = 'Aucune image associée';
}
else {
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier (je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations)
$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
if ($tableau == FALSE) {
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['mon_image']['tmp_name']);
$erreur2 = '</br>Votre fichier n\'est pas une image.';
}
else {
// on teste le type de notre image : jpeg ou png
if ($tableau[2] == 2 || $tableau[2] == 3) {
// si on a déjà un fichier qui porte le même nom que le fichier que l'on tente d'uploader, on modifie le nom du fichier que l'on upload
if (is_file('pics/'.$_FILES['mon_image']['name'])) $file_upload = $_POST['nom'].$_FILES['mon_image']['name'];
else $file_upload = $_FILES['mon_image']['name'];
$photo = $file_upload ;

// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille
copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);

// il nous reste maintenant à générer la miniature

// si notre image est de type jpeg
if ($tableau[2] == 2) {
// on crée une image à partir de notre grande image à l'aide de la librairie GD
$src = imagecreatefromjpeg($dir.'/'.$file_upload);
// on teste si notre image est de type paysage ou portrait
if ($tableau[0] > $tableau[1]) {
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
}
else {
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
}
// on copie notre fichier généré dans le répertoire des miniatures
imagejpeg ($im, $dir_mini.'/'.$file_upload);
}
elseif ($tableau[2] == 3) {
$src = imagecreatefrompng($dir.'/'.$file_upload);
if ($tableau[0] > $tableau[1]) {
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
}
else {
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
}
imagepng ($im, $dir_mini.'/'.$file_upload);
}

}
else {
// si notre image n'est pas de type jpeg ou png, on supprime le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['mon_image']['tmp_name']);
$erreur2 = '</br>Votre image est d\'un format non supporté.';
}
}
}

$base = mysql_connect ('localhost', '?????', '?????');
mysql_select_db ('db197899428', $base);




$sql = 'INSERT INTO annonce VALUES("","'.$_SESSION['id'].'","'.addslashes($_POST['genre']).'","'.addslashes($_POST['produit']).'","'.htmlentities(addslashes($_POST['description'])).'","'.addslashes($_POST['departement']).'", "'.addslashes($_POST['prix']).'", "'.addslashes($photo).'","21")';
mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
mysql_close();
$erreur = ' Votre annonce a été sauvegardée ';





}
}
else {
$erreur = 'tous les champs de ce formulaire doivent être rempli (nous ne communiquons aucunes informations personnelles dans les annonces (toutes reponses vous seront transmisent par mail)';
}
}
else {
$erreur = 'Pour passer votre annonce veuillez remplir le formulaire ci dessous';
}

?>


mais ca me donne des image avec une hauteur de 150px alors que je veux qu'elle aient une largeur de 150px

(J'ai utiliser le script qui se trouve ds le comment faire que g modifier pour ce que je voulais en faire a savoir utiliser une table pour restituer l'image )
jocker
le 26/02/2007 à 21:01
jocker
ok donc en fait la variable $ratio c'est la taille en px de la largeur ou de la hauteur. Il prend le plus grand.

donc ca dépend si tu bosses avec des images en portrait ou en paysage.

si tu as un portrait les 150px seront en hauteur et la largeur sera plus petite, dans ce cas là tu dois recalculer ton nouveau $ratio qui sera plus grand jusqu'a ce que la largeur soit égale à 150px.

ex: portrait de 100*300
redimensionné il va faire 50*150. toi tu veux largeur = 150 donc ton coeff va être de 3

3*50 = 150
3*150 = 450.

Dans ce cas là ton $ratio sera 450 normalement.

++
vengeur002
le 26/02/2007 à 21:23
vengeur002
oui mais il dois y avoir plus simple
c est vachement compliquer

pour info mes connaissance en librairie GD sont trés limité

a mon avis il suffis de modifier un parametre dans la partie créé une miniature mais .... lequel ? :(
i M@N
le 26/02/2007 à 23:53
i M@N
Hello.

dans ce cas la solution c'est de se pencher sur la librairie GD.

Quelle est la partie du script qui fait intervenir la variable $ratio ?
<?php 
/*...*/
/*on teste si notre image est de type paysage ou portrait*/
if ($tableau[0] > $tableau[1]) {
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
}
else {
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
}
/*...*/
?>


Qu'est-ce ça veut dire ? quelles sont les fonctions utilisées ??
imagecreatetruecolor :
resource imagecreatetruecolor ( int x_size, int y_size)

imagecreatetruecolor() retourne une ressource représentant une image noire de largeur x_size, et de hauteur y_size.

C'est du français, la fonction s'utilise comme ça : imagecreatetruecolor(x,y), le reste dans le script c'est des maths, on multiplie x ou y (si portrait ou paysage) par le ration $ ratio.

round
round ( float val [, int precision])

round() retourne la valeur arrondie de val à la précision precision (nombre de chiffres après la virgule). Le paramètre precision peut être négatif ou null (sa valeur par défaut).

Rien de rare donc, juste un arrondi.

Sur ce, je te laisse chercher un peu ...

@+...
One Love, One Heart, One Unity.
vengeur002
le 27/02/2007 à 10:42
vengeur002
Merci :D

oui g trouver apres quelque heure de galére (j'avais pas vu ton post :/

merci qd meme je met la portion de code a modifier pour info

//Donc pour info
//$tableau[0] ===> largeur $tableau[1] ===> hauteur
//si largeur est plus grande que la hauteur on a un paysage
if ($tableau[0] > $tableau[1]) {
// donc on calcul le ratio de la hauteur si la largeur est de $ratio donc ici 150px

$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round(($ratio/$tableau[0])*$tableau[1]), $tableau[0], $tableau[1]);
}
else {
//sinon donc si la largeur est plus petite que la hauteur on a un portrait
//donc on calcul le ratio de la hauteur si la largeur est de $ratio
//on peux rearquer que le calcul est le meme
//il suffisais d'inverser le calcul de la largeur vers la hauteur
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round(($ratio/$tableau[0])*$tableau[1]), $tableau[0], $tableau[1]);
}

merci quand meme a jocker
vengeur002
le 27/02/2007 à 10:43
vengeur002
oups g oublier les balise php :( quelqu un pourrait t il editer et les rajouter merci :D
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours