redimentionnement photo longeur ou largeur

Eléphant du PHP | 388 Messages

19 avr. 2010, 19:40

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

Eléphant du PHP | 388 Messages

19 avr. 2010, 19:59

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

Eléphant du PHP | 428 Messages

19 avr. 2010, 20:22

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

ViPHP
ViPHP | 5462 Messages

19 avr. 2010, 20:43


Eléphant du PHP | 388 Messages

19 avr. 2010, 20:55

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]

ViPHP
ViPHP | 5462 Messages

19 avr. 2010, 21:02

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

Eléphant du PHP | 388 Messages

19 avr. 2010, 21:27

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>';
}

?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 avr. 2010, 21:32

il marche trés bien sauf cette histoire quand l'image est en portait ou paysage
C'est à dire ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5462 Messages

19 avr. 2010, 21:32

fais, pour voir ce qu'il affiche
$tableau = getimagesize($_FILES['mon_image']['tmp_name']);
var_dump($tableau);
exit;

Eléphant du PHP | 388 Messages

19 avr. 2010, 22:01

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" }

Eléphant du PHP | 388 Messages

20 avr. 2010, 19:34

A priori j'ai trouvé ma solution j'ai attribué des valeur fixe a deux variable que j'ai imbriqué dans mon code