FAIRE DES VIGNETTES JPEG AUTOMATIQUES AVEC REDIMENSIONNEMENT

Utilisateur anonyme - 12 mai 2003 à 18:13
osgii Messages postés 4 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 27 décembre 2006 - 13 déc. 2006 à 07:33
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/13271-faire-des-vignettes-jpeg-automatiques-avec-redimensionnement

osgii Messages postés 4 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 27 décembre 2006
13 déc. 2006 à 07:33
Bonjour.
Avant que je pose ma question, j'aimerais vous prévenir que je débute, mais que je fais de mon mieu pour apprendre, et surtout comprendre... Pasque se baser sur des morceaux de code pour construir un site, c'est bien beau, mais si on ne les comprends pas, ça ne sert à rien...

Donc, voici ma question :

en fait, le script n'enregistre l'image qu'une seule fois? Et c'est seulement quand il l'affiche, qu'il la redimentionne, c'est juste?

Maintenant, ce que je comprends pas, c'est comment lui indiquer quelle image utiliser, quel fichier. Toi, tu lui donne un nom ( im_transforme ). Moi, si je veux lui dire quelle image prendre ( j'ai plusieurs image dans un dossier ), je dois lister mes images, et ensuite faire une boucle à afficher. Et à la place du nom de l'image, je met une variable? C'est ça?

Donc, si mon résonnement est correct, tu peux afficher une vignette un peu n'importe ou sur ta page. Pas seulement quand tu upload un fichier?

:) J'espère que c'est compréhensible, et que j'aurais une réponse.
Merci encore pour la source, même si je n'ai pas réussi à l'utiliser ( pour l'instant ).
cs_gadou Messages postés 4 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 8 décembre 2005
10 déc. 2006 à 09:24
pour eviter la pixelisation de l'image, remplacer
imagecopyresized
par
imagecopyresampled
cs_matters Messages postés 9 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 17 février 2009
20 avril 2006 à 19:52
Salut,
L'image créé est de mauvaise qualité. ( remarque, c'est pour une miniature )^^
Sinon, coté code, c'est pas mal.
++
LazarusLand Messages postés 7 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 4 mai 2006
14 févr. 2006 à 18:08
Il est super bien fait ton code mais ta bo modifié la qualité, le résultat est merdik qd tu pass du 1200 width en 800 width... Jsé po ptet c moi mai bon... si ya du new, tien moi o couran. ;-)
aquewel Messages postés 143 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 juin 2010
21 juin 2004 à 01:36
pourquoi ca m'affiche des 111 ??????????????
cs_thankol Messages postés 10 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 19 avril 2007
16 juin 2004 à 09:17
SAlut !
est il possible de baisser uniquement la résolution d'une image avce imagejpeg() ? c'est pour mettre avant un upload sur le serveur ..

thanks
antoine129 Messages postés 64 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 5 juin 2006
15 juin 2004 à 20:24
oups c'est super mal indenté mon copier colle :/
désolé :S
antoine129 Messages postés 64 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 5 juin 2006
15 juin 2004 à 20:23
salut :)
Oui ton script est très bien, surtout pour le $stretch, mais je n'ai pas résisté à le modifier un peu (et aussi pour l'utiliser dans ma page) :
- Création d'une miniature jpg à partir d'un fichier jpg, gif ou png
- imagecreatetruecolor, mais besoin de GD2 (tant pis pour les vieux systèmes !)
- echo + return false, ou return true, comme une vraie fonction ;)
Voici donc le code :
_________________________________________________________
function Resize($source, $destination, $width, $height, $stretch, $quality) {
// 1 - Gestion des erreurs :
if (!file_exists($source)){
echo "Erreur : Fichier inexistant !";
return false;
}
if (!function_exists("ImageCreateFromJpeg")){
echo "Erreur : Librairie GD non installée !";
return false;
}
// 2 - Lecture de l'image et de son extension :
$ext = strtolower(strrchr(basename($source),'.'));
if($ext==".jpg" || $ext==".jpe" || $ext==".jpeg"){
$src_img=imagecreatefromjpeg($source);
}else{
if($ext==".gif"){
$src_img=imagecreatefromgif($source);
}else{
if($ext==".png"){
$src_img=imagecreatefrompng($source);
}else{
echo "Erreur : Extension incorrecte.";
}
}
}
if (!$src_img){
echo "Erreur : Lecture impossible de l'image !";
return false;
}
$w = imagesx($src_img);
$h = imagesy($src_img);
// 3 - Redimensionnement en largeur :
if (!$stretch) {
if ((($h * $width) / $w) > $height) {
$im_w = ($w * $height) / $h;
$im_h = $height;
} else {
$im_w = $width;
$im_h = ($h * $width) / $w;
}
} else {
$im_w = $width;
$im_h = $height;
}
$x = ($width-$im_w)/2;
$y = ($height-$im_h)/2;
// 4 - Création d'une image buffer :
$dst_img = imagecreatetruecolor($width, $height);
if (!$dst_img){
echo "Erreur : Buffer '".$dst_img."' non créé !";
return false;
}
$bgc = imagecolorallocate($dst_img, 255, 255, 255);
imagefilledrectangle($dst_img, 0, 0, $width, $height, $bgc);
imagecopyresized($dst_img,$src_img,$x,$y,0,0,$im_w,$im_h,$w,$h);
// 5 - Enregistrement de la miniature en .jpg :
imagejpeg($dst_img,$destination,$quality);
return true;
}
_________________________________________________________
mOut
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
5 juin 2004 à 12:27
bon, y a une autre méthode.
tu crées ton code php qui ne va que générer l'image et qui met bien le header qu'il faut au moment propice.

ensuite, dans ton site, là où tu veux afficher l'image, tu fias ça:



comme le script php sera interprêté comme étant une image, le navigateur affichera bien l'image et tu peux, comme tu vois, passer des variables à ton script via la query string (?var1=...&var2=...&var3=... ...)

c'est pas trop embrouillé?
cs_thankol Messages postés 10 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 19 avril 2007
5 juin 2004 à 09:55
Ok alors c'est raté car j'ai pas mal d'includes avant d'afficher mes vignettes. par exemple j'ai mis mon haut de page dans un include, etc ...

donc si j'ai bien compris une fois que j'ai envoyé des infos vers le naviagteur c'est foutu ?? par contre j'ai lu quelque part qu'on peut annuler un header pour mettre un nouveau ensuite ...

en tout cas merci pour ton aide !
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
4 juin 2004 à 19:02
bon, si tu as ce msg d'erreur c que tu as déjà envoyé des données au navigateur
(vérifie ts les echo, vérifie qu'il n'y a pas d'include avant (en tt cas pas d'include qui affiche quoique ce soit à l'écran)

soit aussi attentif au fait que ceci:

---début fichier

<?
header();
...
?>
---fin fichier

ne peut pas marcher car ytu as déjà envoyé un retour à la ligne au navigateur (parce que le <? est situé sur la deuxième ligne)
tu ne peux pas non plus mettre d'espace avant le <?, ces deux caractères doivent être les PREMIERS de la page.

attention aussi si ta page est include via un include(), require() etc... ds une autre page, parce qu'alors les en-têtes sont aussi déjà envoyés, selon les mêmes conditions.

tu peux effectuer du code PHP avant la fonction header(), mais aucune de ces fonctions ne doit envoyer de données au navigateur, c tt.
cs_thankol Messages postés 10 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 19 avril 2007
4 juin 2004 à 18:46
oui j'ai essayé le header() mais j'ai message d'erreur qui me dit que les entetes http sont deja défini lus haut ... je pense que je n'est vraiment compris comme tout ca fonctionne !!
mais je cherche et je désespère pas !

merci pour ta réponse

A+
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
4 juin 2004 à 18:17
tu dois définir les en-têtes http pour préciser au navigateur que c'est une image et pas un document html.

je me souviens plus de la syntaxe exacte, mais c'est une fonction qui s'appelle header(); et qu'il faut appeler avant tout envoie de données (via echo ou en html avec le code <??>)

renseigne toi sur php.net
cs_thankol Messages postés 10 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 19 avril 2007
4 juin 2004 à 11:49
salut

ce script est vraiment génial !
par contre je n'arrive pas à envoyer la vignette directement au navigateur ?? le navigateur m'affiche l'image sous forme d'une chaine de caractère ??

j'ai lu quelque par que si on ne met pas le paramettre $destination l'image est envoyée au navigateur ??

est réellement possible ?

merci pour votre aide ...
cs_heine Messages postés 58 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 novembre 2006
3 mai 2004 à 19:31
euh g un soucis, pas moyen de personnaliser la taille ca me soirt toujours du 120*120 alors que j'ai a priori pas mal modif de truks>...
cs_myweb Messages postés 4 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 juin 2005
8 nov. 2003 à 08:51
J'ai un problème car les vignettes ne sont pas en couleur mais en noir et blanc je suis chez FREE, tandis qu'avec Easy PHP ca fonctionne bien.

Est il possible de changer quelques chose pour que ca fonctionne chez Free ??
cs_ceced Messages postés 70 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 11 mai 2005
11 sept. 2003 à 14:05
Rien à dire code superbes! trés jolies, compréhenssible le meilleur pour moi, de plus c'est un utilitaire qui sert vraiment! c'est vraiment de la bombe!
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 mai 2003 à 17:02
ah tu pourrais me dire ce que tu fais pr ça :-) ? ça m'intéresse
jbrek Messages postés 25 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 22 mars 2004
14 mai 2003 à 21:32
Ouais, mais g une protection contre ça, t'inquiète...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
14 mai 2003 à 21:16
ben tu vois le problème avec ça, c que si plusieurs personnes chargent les mêmes images en même temps et que subitement le serveur modifie une image, tui risques d'avoir des sales surprises jbrek :-/
jbrek Messages postés 25 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 22 mars 2004
14 mai 2003 à 16:48
Bah, mon script à moi, il génère qu'une seule fois les images, et les regénère seulement si y a eu un changement de paramètre ou un changement de l'image original... Sinon, c du suicide pour le server.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
14 mai 2003 à 07:37
oui c'est vrai, autant que imagecreatetruecolor, bcp mieux mais les ressourcs serveurs se payent cash :-/ c'est pas forcément un bien, surotut ds le cas d'une gallerie dynamique. mais ça vaut la peine de le préciser ^^
jbrek Messages postés 25 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 22 mars 2004
13 mai 2003 à 23:19
Ah encore une remarque, pour des miniatures de meilleures qualité, mieux vaut utiliser imagecopyresampled plutot que imagecopyresized !
Cependant, cette fonction consomme bcp plus de ressource que imagecopyresized ! A vous de voir...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
13 mai 2003 à 19:16
j'ai lu tous les tutos et ils sont tous du même acabi, cette équipe est formidable, sans vlr faire trop la pub, j'ai appris en deux semaines chez eux de rien en php à tout ce qu'il faut pour créer un site dynamique php/mysql. (bon j'avais déjà ttes les bases en programmation ça aide aussi)
Utilisateur anonyme
13 mai 2003 à 19:14
Ah ouais ! Franchement bien, je viens de lire tout ça , t'avais raison c'est franchement bien expliqué :) ... Merci pour ton lien , je garde le site dansmes favoris ... il à l'air pas mal ... mais il est à fouiller avec plus d'attention alors ;) ...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
13 mai 2003 à 19:07
Utilisateur anonyme
13 mai 2003 à 19:05
??? ça fais depuis 20 ou 30 minutes que je navigue sur ton site là www.phpdebutant.com (pas le tien car le lien sur phpcs est breaké) et je trouve tj pas de tutoriaux sur les bibliothéque gd ... alors indiques un url de page ... car moi je trouve quedalle de technique sur ce sité à par des tutoriaux de débutants ... (vu le nom je devais m'y attendre) en tout cas je n'ait pas dit que je réinvente la roue avec mon script... c'est juste en allant sur www.php.net et en étudian des bouts de codes des commentaires, et en faisant mon projet que pas à pas j'ai pondu cette source... donc si elle sert à d'autres c'est cool ...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
13 mai 2003 à 18:28
lol i ls'est pas fait chier c simple :) et pr u ncode vrmnt bie nexpliqué voyez www.phpdebutant.com là c vrmnt excellent, je vous assure en une lecture z'aurez tout compris (sinon vous êtes des ânes ^^)
mais je dirai qd meme bien vu, comme tu as centré l'image, et pas bêtement copié à paritr de 0,0 donc là c vrai que c'est un plus.
jbrek Messages postés 25 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 22 mars 2004
13 mai 2003 à 16:58
Y a quand même une meilleure qualité avec imagecreatetruecolor() !
cs_Francois76 Messages postés 6 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 18 septembre 2008
13 mai 2003 à 15:54
perfect maintenant je peu dire "CA C'EST du SCRIPT !!" ;-)
Utilisateur anonyme
13 mai 2003 à 14:27
je vais poster une autre source en utilisant la bibliothéque GD 1, mais je pense que pour le même effet le script sera plus lent, et moi ayant easy php, j'avais installé la gd 2... donc je me suis pas posé la question ... mais on peut demander l'installation de runtimes sur les servers dédiés ...

A bientôt pour la mise à jour de cette source, akh
cs_Francois76 Messages postés 6 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 18 septembre 2008
13 mai 2003 à 12:20
Très bon code mais juste une petite remarque tout de même c'est concernant l'utilisation de GD en version 2. Sur bien des serveurs (mutualisés) cette version n'est pas disponible c'est encore la version 1.6 qui est la plus répendu et ton script ne fonctionne pas ;(
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
13 mai 2003 à 09:22
(10/10)
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
13 mai 2003 à 09:22
la je dis merci....parce que tu t'es fais ch..r pour un truc que je ne voyais pas comment faire...donc...

MERCIIIII
Utilisateur anonyme
12 mai 2003 à 20:36
Et bien c'est étrange je t'assure, mais j'étais en phase de débuggage car l'image n'étais pas collée correctement avec imagecopyresempled et ça plantais aussi avec createimage ... donc j'ai un peu essayé de changer les fonctions ...

En effet maintenant je sait d'où ça vient, avec create image, il faut faire la pallette de couleurs, ou sinon le plus simple c'est de directement appeller la fonction imagecreatetruecolor.

Attention : Note de Php.Net : imagecreatetruecolor a été ajoutée en PHP 4.0.6 et nécessite GD 2.0.1.

Bréf en gros , avec ce script tout fonctionne niquel mais bon j'ai l'ait laissé à l'état de version BETA ... mais elle fonctionne corectement, donc si vous avez une gallerie de photos, avec un upload d'image de 200 Ko, c'est normal de pas afficher l'image dans le préview avec sa taille si conséquente ...

De plus ce qui est "fun", c'est qu'il ne matraque pas les images en les déformant par un stretch, mais leur donne un aperçu normal... à vous de paramétrer l'arriére plan en changeant ici les valeurs rgb :
$bgc = imagecolorallocate($dst_img, 255, 255, 255);

Bonne prog à tous, akh
cs_mehdibou Messages postés 365 Date d'inscription vendredi 24 mai 2002 Statut Membre Dernière intervention 18 octobre 2004
12 mai 2003 à 18:55
Très bon code, rien à redire :) 10/10

Ha si, un chti truc ;) : lors de l'appel de imagecopyresized() tu passe imagesx($src_img) et imagesy($src_img) or tu as déjà ces valeurs dans $w et $h c'est tout, rien de bien grave :)
Utilisateur anonyme
12 mai 2003 à 18:13
Ah oui, j'oubliais , vous avez un exemple joint avec le zip .