Page 1 sur 1

Redimenssionner Image.

Posté : 31 août 2007, 11:54
par auberstar
Bonjour,

J'ai un script qui permet au utilisateur d'ajouter des images sur leurs comptes, cependant quand les images dépassent 450 de largeur, elles déforment mon site, je voudrais donc qu'elles soient redimenssionner mais "proprement", proportionellement... . Je m'y connais pas trop en php donc si quelqu'un pourrait m'aider. Merci.
Voici mon code :
case 6:$file="myphotos.php";
				//include("checksession.php");
				if(isset($addpic))
				{
						$approved=getSetting("APPROVEPIC");
						if(!empty($url))
						{
								$sql="insert into photos(url,filename,username,upldate,approved) values('$url','$filename','$ses_username',now(),'$approved')";
								$res=mysql_query($sql);
						}
						else if(!empty($uppic_name))
						{
							$allowable=getSetting("ALLOWEDFORMATS");
							$allowablearr=split(",",$allowable);
							$allowedType=0;
							$ext=strchr($uppic_name,".");
							
							if(in_array($ext,$allowablearr))$allowedType=1;
							if($allowedType==1)
							{
							$fileid=generateShortCode();
							$filename=$ses_username.$fileid.$ext;
							
							$copytofile="pics/$filename";
							copy($uppic,$copytofile);
							@unlink($uppic);
							
								$sql="insert into photos(url,filename,username,upldate,approved) values('$url','$filename','$ses_username',now(),'$approved')";
								$res=mysql_query($sql);
							}
							else
							{
								@unlink($uppic);
								$uperror="Format non supporté!";
							}
						}
						if($approved=="Y")
						{
							$error="L'image a été ajoutée.";	
						}
						else if($error=="")
						{
							$error="L'image est en attente de validation.";
						}
				}
				break;
Merci d'avance.

Posté : 31 août 2007, 12:30
par Sékiltoyai
  • Tu dois lire ton image avec imagecreatefrom*() (* : jpeg, gif, png, … ).
  • Tu dois lire les dimensions de l'image avec getimagesize() et calculer les nouvelles dimensions.
  • Tu dois créer une nouvelle image aux nouvelles dimensions avec imagecreate().
  • Tu dois copier l'ancienne image vers la nouvelle avec imagecopy() en précisant les nouvelles dimensions.
  • Tu dois réécrire l'image résultat vers le fichier avec image* (* : jpeg, gif, png, … ).
  • Tu dois libérer les ressources avec imagedestroy().

Posté : 31 août 2007, 13:57
par auberstar
<?
Header("Content-type: image/jpeg");
$image = "logo.jpg";
$src_im = ImageCreateFromJpeg($image);
$size = GetImageSize($image);
$src_w = $size[0];
$src_h = $size[1];
$dst_w = 450; 
$dst_h = round(($dst_w / $src_w) * $src_h);
$dst_im = ImageCreateTrueColor($dst_w,$dst_h);
ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
ImageJpeg($dst_im);
ImageDestroy($dst_im);
imageDestroy($src_im);
?>
est-ce bon ?
Merci.

Posté : 31 août 2007, 14:00
par Sékiltoyai
Pour écrire l'image sur le disque, il ne faut pas mettre le header et il faut spécifier un nom de fichier dans la fonction imagejpeg(). Ensuite, pour savoir si cela fonctionne, tu peux le tester toi même…