Page 1 sur 1

redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 19:40
par spidercrash
bonjour a tous j'ai un petit soucis dans nu de mes script j'ai cela
				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);
				
			
				}
le probléme suivant la taille de la photo elle garde pas le ratio de départ cela est normal a cause de ceci
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]);
					}
je souhaiterai que meme si la photo soit de toute taille cela garde toujours le même ratio même si la photo est légèrement déformé ou plus petite

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 19:59
par spidercrash
il y a de l'avancement

j'ai fait cela
	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 					
					
					
						$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);
				
les photos son bien proportionné le hic elle son plus petite

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 20:22
par visualight
Bonjour,

Je n'ai pas encore eu assez de temps pour aider quelqu'un de manière concrète mais voici déjà un lien te permettant d'utiliser un crop sur tes images ce qui évite la déformation de cette dernière :

http://911-need-code-help.blogspot.com/ ... spphp.html

A dans quelques semaines,
raph

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 20:43
par stealth35

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 20:55
par spidercrash
j'avoue lol meme post,tu veut dire que je doit adapter cela
$image = new Imagick('image.jpg');
$image->thumbnailImage(200, 200, true);
$image->writeImage('image.jpg');
a mon code
			if ($tableau[2] == 2) {
				
				if (is_file('.pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];
				

// 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);
				
				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);
				
			
				}
comme cela
[php]$image = new Imagick('$im');
$image->thumbnailImage(200, 200, true);
$image->writeImage('$im');
[/php]

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 21:02
par stealth35
non, c'est plus faire la promo de ImageMagick, qui est plus simple que GD pour se genre de manipulation (si t'as imagemagick je te conseil de pas t'embêter et de faire les 3 lignes)
sinon pour ton code (j'ai pas tout regardé) tu peux utilise imagecreatefromstring, ce qui te limitera pas au jpeg (sauf si tu veux juste du jpeg biensur), mais envoie tout ton script on sais pas a quoi correspond $tableau

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 21:27
par spidercrash
merci pour ta reponse voici tout mon script

il marche trés bien sauf cette histoire quand l'image est en portait ou paysage
<?php
session_start();
// tester la présence de la session numutilisateurs
if ( isset( $_SESSION['NUMUTILISATEURS']) ) {
// Recuperation pour la variable 
$NUMUTILISATEURS = $_SESSION['NUMUTILISATEURS'];


}
if (isset($_SESSION['MAILUTILISATEURS'])) {


 // traitement
$categorie=$_POST['categorie'];
$typeannonce=$_POST['typeannonce'];
$souscategorie=$_POST['souscategorie'];
$titreannonce=$_POST['titreannonce'];
$descriptionannonce=$_POST['descriptionannonce'];
$prix=$_POST['prix'];
$departement=$_POST['departement'];
$region=$_POST['region'];

include ('connect.php');
$crypt=md5($MDP);	


//dossier ou seront stocket les miniature et les images
$dir = getcwd()."/pics";
$dir_mini = getcwd()."/mini";

//taille des miniature
$ratio = 90;

//recuperation du post du formulaire
if (isset($_POST['ok'])) {
// on teste si le champ permettant de soumettre un fichier est vide ou non
	if (empty($_FILES['mon_image']['tmp_name'])) {
		
		$erreur = 'Aucun fichier envoyé.';
	}
			else {
			
			
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier		
		$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']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}

	
		else {
		

		
			if ($tableau[2] == 2) {
				
				if (is_file('.pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];
				

// 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);
				
				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);
				
			
				}
				
			include ('connect.php');			
			
                
                        $sql2 = "INSERT INTO annonces (categorie,typeannonce,souscategorie,titreannonce,descriptionannonce,prix,date,departement,region,NUMUTILISATEURS) VALUES ('$categorie','$typeannonce','$souscategorie','$titreannonce','$descriptionannonce','$prix','".date("Y-m-d H:i:s")."','$departement','$region','$NUMUTILISATEURS')";
                        $req = mysql_query($sql2)or die(mysql_error());
			
							$nom = "/{$_FILES['mon_image']['name']}";
							$image = $dir.$nom;
							$miniature = $dir_mini.$nom;
							$numannonce=mysql_insert_id();
							$sql3 = "INSERT INTO images (image,miniature,numannonce) VALUES ('$image','$miniature','$numannonce')";       
							$req = mysql_query($sql3)or die(mysql_error());

			  
			 header('Location: ../mesannonces.php');
			
			
			
									}
			else {
// si notre image n'est pas de type jpeg				
				unlink($_FILES['mon_image']['tmp_name']);
				$erreur = 'Votre image est d\'un format non supporté.';
			}
		}
	}
	
}
} else {
        echo '<br>Vous n\'avez pas les droits pour regarder cette page...<br><br>';
        echo '<a href="index.php">Retour</a>';
}

?>

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 21:32
par zeus
il marche trés bien sauf cette histoire quand l'image est en portait ou paysage
C'est à dire ?

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 21:32
par stealth35
fais, pour voir ce qu'il affiche
$tableau = getimagesize($_FILES['mon_image']['tmp_name']);
var_dump($tableau);
exit;

Re: redimentionnement photo longeur ou largeur

Posté : 19 avr. 2010, 22:01
par spidercrash
l'image se redimensionne bien sans problème les miniatures sont bien présente sauf que pour une photo en vertical et la meme a l'horizontal cela change completement.
je souhaiterai quand horizontal ou verticale même si sa déforme légèrement la photo les taille soit la meme

en faisant ta commande cela me donne

array(7) { [0]=> int(455) [1]=> int(339) [2]=> int(2) [3]=> string(24) "width="455" height="339"" ["bits"]=> int(8) ["channels"]=> int(3) ["mime"]=> string(10) "image/jpeg" }

Re: redimentionnement photo longeur ou largeur

Posté : 20 avr. 2010, 19:34
par spidercrash
A priori j'ai trouvé ma solution j'ai attribué des valeur fixe a deux variable que j'ai imbriqué dans mon code