Redimensionner une image lors d'un upload
morgan24
Messages postés
220
Date d'inscription
Statut
Membre
Dernière intervention
-
Mr.White Messages postés 251 Date d'inscription Statut Membre Dernière intervention -
Mr.White Messages postés 251 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Redimensionner une image lors d'un upload
- Image iso - Guide
- Légender une image - Guide
- Youtube upload - Télécharger - Diffusion
- Comment redimensionner une image - Guide
- Acronis true image - Télécharger - Sauvegarde
8 réponses
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:
Bonne chance :)
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); } ?>
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
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
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
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
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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:
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 :)
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 :)
Bonjour et merci pour ce script,
j'ai cependant des questions :
où places-tu la première ligne ?
dois-je remplacer "/ton/chemin/vers/ton/", "image.png" par le dossier vers lequel j'upload mes images ?
c'est à dire "mon_site/dossier_upload/", ce qui supprime la ","
Enfin, il semble y avoir un problème avec le getimagesize puisque lorsque j'ouvre ma page, j'ai :
Merci d'avance. =)
j'ai cependant des questions :
où places-tu la première ligne ?
<?php resize_clone("/ton/chemin/vers/ton/", "image.png"); ?>
dois-je remplacer "/ton/chemin/vers/ton/", "image.png" par le dossier vers lequel j'upload mes images ?
c'est à dire "mon_site/dossier_upload/", ce qui supprime la ","
Enfin, il semble y avoir un problème avec le getimagesize puisque lorsque j'ouvre ma page, j'ai :
Warning: Missing argument 2 for resize_clone() in /home/www/... Warning: getimagesize() [function.getimagesize]: Read error! in /home/www/... Warning: Division by zero in /home/www/... Warning: getimagesize() [function.getimagesize]: Read error! in /home/www/... Warning: getimagesize() [function.getimagesize]: Read error! in /home/www/... Warning: unlink(../photos/) [function.unlink]: Is a directory in /home/www/...
Merci d'avance. =)
Merci beaucoup pour la fonction, cela marche très bien.
Pour jean.miche tu place
<?php resize_clone("/ton/chemin/vers/ton/", "image.png"); ?>
où tu veux, ta page web ou dans ton code même.
Et en ce qui concerne la virgule, non ne la supprime pas car cela sert à envoyer deux données à la fonction resize_clone(01tonchemin, 02tonfichier).
Pour jean.miche tu place
<?php resize_clone("/ton/chemin/vers/ton/", "image.png"); ?>
où tu veux, ta page web ou dans ton code même.
Et en ce qui concerne la virgule, non ne la supprime pas car cela sert à envoyer deux données à la fonction resize_clone(01tonchemin, 02tonfichier).
Bonjour,
Je cherche également à ce que l'utilisateur n'ai pas a se soucié du poids de son image et donc à ce que le redimensionnement se fasse automatiquement. D'après ce que je lit ici j'ai l'impression que c'est le cas mais ce n'est pas dit explicitement. J'aimerai donc que vous me confirmer que c'est bien possible avec ce script avant que je me lance dans son intégration à ma page.
Ou si vous me dirigé vers un autre script qui réalise ce que je cherche, ça m'irra tout aussi bien ;o)
Merci.
Je cherche également à ce que l'utilisateur n'ai pas a se soucié du poids de son image et donc à ce que le redimensionnement se fasse automatiquement. D'après ce que je lit ici j'ai l'impression que c'est le cas mais ce n'est pas dit explicitement. J'aimerai donc que vous me confirmer que c'est bien possible avec ce script avant que je me lance dans son intégration à ma page.
Ou si vous me dirigé vers un autre script qui réalise ce que je cherche, ça m'irra tout aussi bien ;o)
Merci.
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
peux-tu me dire comment tu as utilisé cette fonction s'il te plaît ?
Car je n'arrive pas à l'appliquer...
Notamment cette partie :
Merci :)
j'ai cependant des questions :
où places-tu la première ligne ?
dois-je remplacer "/ton/chemin/vers/ton/", "image.png" par le dossier vers lequel j'upload mes images ?
c'est à dire "mon_site/dossier_upload/", ce qui supprime la ","
Enfin, il semble y avoir un problème avec le getimagesize puisque lorsque j'ouvre ma page, j'ai :
Merci d'avance. =)