Rechercher : dans
Par :

Redimensionner une image lors d'un upload

Dernière réponse le 17 jun 2009 à 10:37:53 morgan24, le 19 mai 2009 à 15:10:57 
 Signaler ce message aux modérateurs

Bonjour,

J'ai un petit site internet d'annonces avec photos, le problème est que lorsque un membre dépose une photo trop lourde, ça plante ...

Je suis à la recherche d'un script pour redimensionner automatiquement une image/photo lorsque le membre veut insérer une image dans son annonce

Merci pour votre aide

Configuration: Windows XP
Firefox 3.0.10

Meilleures réponses pour « Redimensionner une image lors d'un upload » dans :
Redimensionner un lot d'images/photos VoirVous voulez redimensionner vos photos ou images pour pouvoir les envoyer plus facilement par mail, insérer sur un blog, ou plus simplement gagner de l'espace sur votre disque dur ? Mais vous ne voulez pas les redimensionner une par une à la main...
Télécharger 20/20 Voir20/20 est un logiciel qui porte bien son nom. 20/20 est un programme qui non seulement permet la capture d'écran de n'importe qu'elle application ou même du web, mais aussi il fait dans la retouche d'images. Lors de la capture, vous pouvez choisir...

1

rescue, le 19 mai 2009 à 15:54:07

Bonjour,

Je ne vois pas a quoi cela pourrait servir... (Pourquoi programmer alors que l'on peux informer)

Il suffit de mettre un message au niveau du formulaire :
Attention ce serveur n'accepte pas des fichiers dont la taille est supérieur à 500ko (par exemple)

Dans votre formulaire qui upload placer ce code :
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
Vous bloquez ainsi les photos qui sont au dessus de ce poids.
(500000 octets environs 500Ko).

Cordialement
Vivre pour le libre et respirer le bonheur c'est la santé toute l'année.
Portable Acer TravelMate 4020 triple boot : Ubuntu, OpenSuse, XP Pro

Répondre à rescue

2

xxkirastarothxx, le 19 mai 2009 à 16:04:43

Cadeau :)
Petit script perso de redimentionement d'image.
l'image garde son ratio d'aspect.

Je te conseil de faire des test:
-l'image est copié,
-l'image "image.png" est redimensionné en petit et en grand avec des tag "MINI_images.png" et "BIG_image.png"
-et peut etre d'autre fonction qui ne te serront pas forcement utilies.

utilisation:

<?php resize_clone("/ton/chemin/vers/ton/", "image.png");
n'oublie pas le "/" a la fin du chemin

Bonne chance :)

<?php
function resize_clone($path, $file)
{
	list($width, $height, $type, $attr) = getimagesize($path.$file);
	$ratio = $height / $width;
	if ($height > 500 OR $width > 500)
	{
		if($ratio <= 1)
		{
			$x = 500;
			$y = 500*$ratio;
		}
		else
		{
			$y = 500;
			$x = 500*(1/$ratio);
		}
	}
	else
	{
		if($ratio <= 1)
		{
			$x = $width;
			$y = $width*$ratio;
		}
		else
		{
			$y = $height;
			$x = $height*(1/$ratio);
		}
	}
	$size = getimagesize($path.$file);
	if ( $size)
	{
		if ($size['mime']=='image/jpeg' )
		{
			$img_big = imagecreatefromjpeg($path.$file); # On ouvre l'image d'origine
			$img_new = imagecreate($x, $y);
			# création de la miniature
			$img_mini = imagecreatetruecolor($x, $y)
			or   $img_mini = imagecreate($x, $y);
			// copie de l'image, avec le redimensionnement.
			imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
			imagejpeg($img_mini,$path."big_".$file );
		}
		elseif ($size['mime']=='image/png' )
		{
			$img_big = imagecreatefrompng($path.$file); # On ouvre l'image d'origine
			$img_new = imagecreate($x, $y);
			# création de la miniature
			$img_mini = imagecreatetruecolor($x, $y)
			or   $img_mini = imagecreate($x, $y);
			// copie de l'image, avec le redimensionnement.
			imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
			imagepng($img_mini,$path."big_".$file );
		}
		elseif ($size['mime']=='image/gif' )
		{
			$img_big = imagecreatefromgif($path.$file); # On ouvre l'image d'origine
			$img_new = imagecreate($x, $y);
			# création de la miniature
			$img_mini = imagecreatetruecolor($x, $y)
			or   $img_mini = imagecreate($x, $y);
			// copie de l'image, avec le redimensionnement.
			imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
			imagegif($img_mini,$path."big_".$file );
		}
	}
	if($ratio <= 1)
	{
		$x = 90;
		$y = 90*$ratio;
	}
	else
	{
		$y = 90;
		$x = 90*(1/$ratio);
	}
	$size = getimagesize($path.$file);
	if ( $size)
	{
		if ($size['mime']=='image/jpeg' )
		{
			$img_big = imagecreatefromjpeg($path.$file); # On ouvre l'image d'origine
			$img_new = imagecreate($x, $y);
			# création de la miniature
			$img_mini = imagecreatetruecolor($x, $y)
			or   $img_mini = imagecreate($x, $y);
			// copie de l'image, avec le redimensionnement.
			imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
			imagejpeg($img_mini,$path."mini_".$file );
		}
		elseif ($size['mime']=='image/png' )
		{
			$img_big = imagecreatefrompng($path.$file); # On ouvre l'image d'origine
			$img_new = imagecreate($x, $y);
			# création de la miniature
			$img_mini = imagecreatetruecolor($x, $y)
			or   $img_mini = imagecreate($x, $y);
			// copie de l'image, avec le redimensionnement.
			imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
			imagepng($img_mini,$path."mini_".$file );
		}
		elseif ($size['mime']=='image/gif' )
		{
			$img_big = imagecreatefromgif($path.$file);
			$img_new = imagecreate($x, $y);
			$img_mini = imagecreatetruecolor($x, $y)
			or   $img_mini = imagecreate($x, $y);
			imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
			imagegif($img_mini,$path."mini_".$file );
		}
	}
	unlink($path.$file);
}
?>
† Quel est le plus grand mal de l'humanité, L'ignorance ou l'indifférence ? †
† A vrai dire... J'en sais rien, et j'm'en fou ... †

Répondre à xxkirastarothxx

3

morgan24, le 19 mai 2009 à 16:31:37

Merci pour ton info, mais ça ne fonctionne pas

je viens d'essayer comme ceci :

<?php resize_clone("jackson/", "test.png"); ?>
<?php
function resize_clone($path, $file)
{
list($width, $height, $type, $attr) = getimagesize($path.$file);
$ratio = $height / $width;
if ($height > 500 OR $width > 500)
{
if($ratio <= 1)
{
$x = 500;
$y = 500*$ratio;
}
else
{
$y = 500;
$x = 500*(1/$ratio);
}
}
else
{
if($ratio <= 1)
{
$x = $width;
$y = $width*$ratio;
}
else
{
$y = $height;
$x = $height*(1/$ratio);
}
}
$size = getimagesize($path.$file);
if ( $size)
{
if ($size['mime']=='image/jpeg' )
{
$img_big = imagecreatefromjpeg($path.$file); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
imagejpeg($img_mini,$path."big_".$file );
}
elseif ($size['mime']=='image/png' )
{
$img_big = imagecreatefrompng($path.$file); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
imagepng($img_mini,$path."big_".$file );
}
elseif ($size['mime']=='image/gif' )
{
$img_big = imagecreatefromgif($path.$file); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
imagegif($img_mini,$path."big_".$file );
}
}
if($ratio <= 1)
{
$x = 90;
$y = 90*$ratio;
}
else
{
$y = 90;
$x = 90*(1/$ratio);
}
$size = getimagesize($path.$file);
if ( $size)
{
if ($size['mime']=='image/jpeg' )
{
$img_big = imagecreatefromjpeg($path.$file); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
imagejpeg($img_mini,$path."mini_".$file );
}
elseif ($size['mime']=='image/png' )
{
$img_big = imagecreatefrompng($path.$file); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
imagepng($img_mini,$path."mini_".$file );
}
elseif ($size['mime']=='image/gif' )
{
$img_big = imagecreatefromgif($path.$file);
$img_new = imagecreate($x, $y);
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);
imagegif($img_mini,$path."mini_".$file );
}
}
unlink($path.$file);
}
?>

et ça me dit :

Warning: unlink(jacksoni/test.png) [function.unlink]: Permission denied in d:\www\jacksonman.fr\htdocs\fototest.php on line 116

Répondre à morgan24

4

xxkirastarothxx, le 19 mai 2009 à 17:05:17

Permission denied ==> tu n'as pas les droits sur l'image pour la supprimé.
plusieurs possibilité, de la plus propre à la plus burine:

1] si tu as un access ftp, ssh ou même local au serveur, tente un chmod 777 sur ton image
2] sinon essaye de faire un chmod 777 de ton image via php
3] met un @ devant la commande unlink de la fonction
4] supprime la commande unlink de la fonction
† Quel est le plus grand mal de l'humanité, L'ignorance ou l'indifférence ? †
† A vrai dire... J'en sais rien, et j'm'en fou ... †

Répondre à xxkirastarothxx

5

morgan24, le 20 mai 2009 à 11:13:03

Bonjour,

Merci beaucoup pour ton aide car ça fonctionne. Il reste qd même un problème..., lorsque le membre upload une photo lourde (style 3 MO) sur mon site, ça ram beaucoup, voir ça plante. Est ce possible de réduire automatiquement la photo juste avant l'upload ? Tout en sachant que le membre ne va pas du tout savoir réduire lui même la photo et ne va pas vouloir s'embêter avec ça.
Il y a un site de vente aux enchères"très connu :-)", ou tu peux insérer des photos ultra lourdes sans attendre 20 ans et sans plantage; comment font ils !?

Merci encore pour votre aide

Répondre à morgan24

6

rescue, le 20 mai 2009 à 11:42:56
  • +1

Bonjour,

Je vois que vous avez opté pour le upload avec réduction de l'image en temps réel.
C'est votre choix j'espère que vous avez fait le bon.

Pour augmenter la durée d'un script sur un serveur web il faut modifier la directive max_execution_time du php.ini comme cela n'est pas possible puisque le fichier est chez votre hébergeur alors voici une solution à condition que la directive desable_functions ne soit pas alimenté.

Vous placer cette fonction php dans votre scritp upload : set_time_limit(0);

J'oubliai, il faut aussi que la directive upload_max_filesize soit au dessus de 2Mo

Astuce : placer un fichier php.ini à la racine de votre serveur web avec à l'intérieur

max_execution_time = 180
upload_max_filesize = 10


Cordialement
Vivre pour le libre et respirer le bonheur c'est la santé to­ute l'année.
Portable Acer TravelMate 4020 triple boot : Ubuntu, OpenSuse­, XP Pro

Répondre à rescue

7

morgan24, le 25 mai 2009 à 10:56:07

Bonjour,

Tout d'abord merci beaucoup pour vos infos précieuses, tout fonctionne à merveille, le bonheur total ....

Un dernier petit problème, la qualité de la petite photo n'est pas du tout net, elle fait +/- 3 ko. Comment puis je faire pour qu'elle soit beaucoup plus net (exemple : "dans le site de vente aux enchères" les petites photos de 3 ko sont très net) !

Merci

Répondre à morgan24

8

 xxkirastarothxx, le 17 jun 2009 à 10:37:53

Alors, j'ai une petite astice, mais je ne sais pas ce que ça pourra donner.
Si je dis pas de bétise ça à marché pour moi:

dans mon script, remplace tout les "imagecreate" par "imagecreatetruecolor", sauf pour les lignes ou il y a:

$img_mini = imagecreatetruecolor($x, $y) or   $img_mini = imagecreate($x, $y);
dans ce cas il te suffis de supprimer "or $img_mini = imagecreate($x, $y)"

Autre chose:

Je vois que vous avez opté pour le upload avec réduction de l'image en temps réel.
C'est votre choix j'espère que vous avez fait le bon.

Ceci m'intéresse:
Que conseillerai tu d'autre que cet astuce ?
Un système qui, par exemple, upload l'image, mais ne la redimensionnerai que, par exemple, aux heurs de creux, ou un script qui "scan" l'activiter de processeur quelques chose comme ça ?
Enfin si tu as d'autre conseil je suis preneur par-ce que c'est vrai que sur un site très visité ça pourrait posé problème.

Merci :) † Quel est le plus grand mal de l'humanité, L'ignorance ou l'indifférence ? †
† A vrai dire... J'en sais rien, et j'm'en fou ... †

Répondre à xxkirastarothxx