cedeb1971
Messages postés4Date d'inscriptionjeudi 10 novembre 2011StatutMembreDernière intervention 2 octobre 2017 11 nov. 2011 à 01:34
Bonsoir
Ce tuto super bien fait date un peu maintenant mais je viens de le trouver en faisant une recherche pour redimensionner des images online.
J'ai recopié le code intégralement en modifiant les chemins.
Cependant à la fin l'image créée et enregistrée est noire.
Que faire ?
Avez-vous la solution ?
D'avance merci
cedeb1971
Messages postés4Date d'inscriptionjeudi 10 novembre 2011StatutMembreDernière intervention 2 octobre 2017 10 nov. 2011 à 11:25
Bonjour à toutes et à tous
Ce tuto date et j'espère que quelqu'un pourra me répondre.
J'ai appliqué exactement le même code que ci-dessus en modifiant juste les chemins des images.
La fonction crèe bien une miniature mais cette miniature est noire. L'image initiale n'est pas associée.
Que faire ?
Merci
speedylol
Messages postés228Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention27 novembre 2013 28 oct. 2005 à 12:49
Comment fait tu ton appel au telechargement de l'image please???
lmaix
Messages postés2Date d'inscriptiondimanche 10 juillet 2005StatutMembreDernière intervention 4 août 2005 4 août 2005 à 11:28
C'est bon j'ai rien dit... oubli du CHMOD !!! Alala il était tard aussi. Désolé et bravo encore.
lmaix
Messages postés2Date d'inscriptiondimanche 10 juillet 2005StatutMembreDernière intervention 4 août 2005 4 août 2005 à 04:02
Salut je me lance à peine dans tout ce qui est retouche d'image et je dois vous dire que je suis tres admiratif de vos travaux et de votre communauté aussi...
Voilà le script de Pyroflo a l'air parfait pour mes besoins, donc merci à lui déjà.
Le seul soucis c'est que j'ai recopié tel quel le code en changeant bien evidement les variables de la fonction MakeThumb en MakeThumb('test.jpg',200,150); mais ca ne marche pas.
Voilà donc rien de bien méchant mais j'ai ce message d'erreur:
Warning: imagejpeg(): Unable to open 'images/mini_est.jpg' for writing in /home/www/image.php on line 46
Bon je débute donc excusez moi si je vous fait répeter. De plus j'ai fait un phpinfo(); j'ai GD2 donc je comprends pas.
Merci d'avance
cs_fab512
Messages postés31Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention29 juin 2007 8 juil. 2004 à 13:23
vi, perso, je suis entrain de devellopper une galerie photo pour ma petite soeur, et mon voisin, avec une GUI simplifiée, quand j'aurais fini, je la metterais en ligne, pour avoir vos commentaires ;-)
pyroflo
Messages postés323Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention17 mai 2005 8 juil. 2004 à 13:20
Exact, une telle fonction ne peut convenir à tout le monde :)
cs_fab512
Messages postés31Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention29 juin 2007 8 juil. 2004 à 12:51
vi... en fait tout dépend de ce que tu veux faire :-)
sepultura666
Messages postés7Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention16 octobre 2006 8 juil. 2004 à 12:49
le code que j'avais mis un peu plus haut contient des boucles pour une seule et bonne raison, si admettons que tu veuilles faire 10 redimentionnement successifs suivant la taille du fichier envoyer, ben tu peux le faire, suffit de mettre dans le array qui contient les taille tes valeurs, comme çà avec unseul script, non seulement tu optimise les images crées, mais en plus tu peux faire x redimentionnements
genre tu envoye une image en 1600x1200 et t veux qu'elle soit redimentionnée en : 1600*1200, 1280*960, 1024*768, 640*480, 576*384, 160*120, 80*60 ben tu met simplement les valeurs dans le array, et le script se charge de tout faire lui même en renommant les fichier suivant cette règle $nom_du_fichier."_".$taille.".jpg";
c'est vachement plus imple nan ???
cs_fab512
Messages postés31Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention29 juin 2007 8 juil. 2004 à 12:24
[font name=fixedsys]
Donc voilà en gros ce que je fait:
On donne a la fonction une image :
Taille[1]
+-----------------+ T
| | a
| | i
| image | l
| | l
| | e
+-----------------+[0]
Maintenant on lui donne un rectangle :
largeur
+--------+
| | h
| | a
| | u
| recta | t
| ngle | e
| | u
| | r
| |
+--------+
Pour rentre l'image dans ce rectangle, en touchant deux bords, il y'a deux solutions :
Soit que le bord du haut touche le bord du haut, et le bord du bas touche le bord du bas, donc en definisant que la nouvelle image a pour hauteur la hauteur du rectangle, en appliquant le ratio (hauteur/largeur), on obtient la largeur nécéssairepour avoir une image proportionel, si cette valeur est plus grande que la largeur du rectangle.
Si la largeur ainsi définie est plus grande que la largeur du rectangle, on recommence en appliquant ce petit algorythme directement a la largeur
Est ce clair ?
LOL
@+++ tlm
pyroflo
Messages postés323Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention17 mai 2005 8 juil. 2004 à 01:07
Pas très grave :)
Pour les boucles, je pensais pouvoir me rapprocher de la veleur minimale en "tatonnant".
cs_fab512
Messages postés31Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention29 juin 2007 8 juil. 2004 à 01:04
dsl, je suis un boulet, pas capable de faire un ctrl+c dans le bon fichier... le code ci dessus ne marche que pour les carés, le code pour les rectangles (Pour que l'image $addr rentre dans le rectangle de dimension $hauteur, $largeur, en touchant au moins un des bords) est là :
<?
$image=imagecreatefromjpeg($addr);
$taille=getimagesize($addr);
$ratio=$taille[0]/$taille[1];
$hauteur2=$largeur*$ratio;
$largeur2=$hauteur/$ratio;
if($hauteur2<=$hauteur) $largeur2=$largeur;
else $hauteur2=$hauteur;
$image2=imagecreate($hauteur2,$largeur2);
imagecopyresized($image2,$image,0,0,0,0,$hauteur2,$largeur2,$taille[0],$taille[1]);
imagejpeg($image2);
?>
Vala...
cs_fab512
Messages postés31Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention29 juin 2007 7 juil. 2004 à 15:51
pour ma part, j'utilise ça :
Pour que l'image $addr rentre dans le rectangle de dimension $hauteur, $largeur, en touchant au moins un des bords
<? $image=imagecreatefromjpeg($addr);
$taille=getimagesize($addr);
$ratio=$taille[0]/$taille[1];
if($ratio>1)
{$largeur2=$largeur;
$hauteur2=$largeur/$ratio;}
else
{$hauteur2=$hauteur;
$largeur2=$hauteur/$ratio;}
$image2=imagecreate($largeur2,$hauteur2);
imagecopyresized($image2,$image,0,0,0,0,$largeur2,$hauteur2,$taille[0],$taille[1]);
imagejpeg($image2); ?>
ça tiens en 15 lignes... pourquoi faire une boucle ?
pyroflo
Messages postés323Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention17 mai 2005 20 avril 2004 à 16:32
Naixn, t'as raison, je n'avais pas du tout pensé à ce cas de figure :)
Naixn
Messages postés455Date d'inscriptionmardi 17 septembre 2002StatutMembreDernière intervention22 juillet 2007 19 avril 2004 à 20:59
Mmmgh ... Un grand merci pour cette source qui m'a été utile.
par contre, j'ai eu un problème parceque moi je n'avais pas qu'un seul sous dossier, et ton script n'est fait pour en gérer qu'un car :
> substr($img,strpos($img,'/') + 1)
--> Va chercher la première occurence de "/".
Je te conseille plutôt de metre :
> substr(strrchr($img, "/"), 1)
--> qui va chercher la derniève occurence de "/" et donc supprimer tous le chemin à l'image :)
En tout cas encore merci pour lsa source :)
yakou32
Messages postés32Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention 3 avril 2015 14 mars 2004 à 13:56
Excusez-moi, je suis un peu neuneu et je débute... J'aimerais modifier le répertoire de destination des images... Je tente ce code, mais ça ne fonctionne pas (aucun message d'erreur ni de création de miniature...)
// Récupération des infos sur l'image
$TImage = getimagesize($DestinationFolder.$img);
// Rapport initial: aucune réduction
$rapport = 1;
// Si la largeur de l'image est supérieure à la limite
if ($TImage[0] > $maxX)
// Tant que la largeur réduite est supérieure à la limite
while ($TImage[0] / $rapport > $maxX)
// Augmentation de la réduction
$rapport = $rapport + 0.5;
// Assignation de la largeur finale
$xF = $TImage[0] / $rapport;
// Si la hauteur de l'image est supérieure à la limite
// Si non, le rapport est le même que celui utilisé pour la largeur
if ($TImage[1] > $maxY)
// Tant que la hauteur réduite est supérieure à la limite
while ($TImage[1] / $rapport > $maxY)
// Augmentation de la réduction
$rapport = $rapport + 0.5;
// Assignation de la hauteur finale
$yF = $TImage[1] / $rapport;
// Récupération du handle de l'image selon son format
switch($TImage[2]) {
case 1:
$imageF = imagecreatefromgif($DestinationFolder.$img);
break;
case 2:
$imageF = imagecreatefromjpeg($DestinationFolder.$img);
break;
case 3:
$imageF = imagecreatefrompng($DestinationFolder.$img);
break;
}
// Création de la miniature
$thumbF = imagecreatetruecolor($xF,$yF);
// Envoie de l'image au navigateur selon son format
switch($TImage[2]) {
case 1:
imagegif($thumbF,'../image-bdd/maxi_'.substr($img,strpos($img,'/') + 1), 60);
break;
case 2:
imagejpeg($thumbF,'../image-bdd/maxi_'.substr($img,strpos($img,'/') + 1), 60);
break;
case 3:
imagepng($thumbF,'../image-bdd/maxi_'.substr($img,strpos($img,'/') + 1), 60);
break;
}
// Libération de la mémoire
imagedestroy($thumbF);
imagedestroy($imageF);
}
?>
<?php
unlink("../image-bdd/".$row_LastPhoto['file']);
echo "l'image a originale a été effacée.";
?>
sepultura666
Messages postés7Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention16 octobre 2006 22 févr. 2004 à 10:26
Autre truc, le PNG c'est chiant parceque quand tu te sert de la lib php pour créer les fichiers PNG, ben elle détruit la couche alpha, ce qui est génant parfois, et pour le gif c'est aussi des redimentionnement merdiques et de très mauvaise qulaitée, franchement mieux vaut rester sur du JPG...
pyroflo
Messages postés323Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention17 mai 2005 21 févr. 2004 à 21:25
Intéressant ;p
sepultura666
Messages postés7Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention16 octobre 2006 21 févr. 2004 à 21:20
C'est parceque si dans MATRIX tu met d'autre variables en PLUS ben la boucle va automatiquement faire tout les redimentionnement successifs pour y arriver, genre tu veux que quand tu envoye une image en 1280*960 par exemple tu veux conserver une image de 1024x768, une de 800x600 une de 640x480 une de 160x120 et une de 80x60, pour quelles raisons je sais pas mais tu veux le faire... ;-P ben tu met simplement :
$matrix_redim = array ("1024","768","800","600","640","480","160","120","80","60");
et le tour est joué, dans ce cas là tout les redimentionnements vont êtres faits, et l'image en 1280x960 supprimée d'elle même, en plus les images crées auront en extension "_$taille".
voilà le pourquoi du comment... lol
jeepnet
Messages postés2Date d'inscriptionjeudi 19 février 2004StatutMembreDernière intervention13 juin 2005 21 févr. 2004 à 15:28
Très bon source, ceci dit, ta premiere boucle pour le rapport bof:
pk tu n'a pas fait ca?
// Si la largeur de l'image est supérieure à la limite
if ($TImage[0] > $maxX)
$rapport = $TImage[0] / $maxX;
Enfin merci qd meme.
sepultura666
Messages postés7Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention16 octobre 2006 16 févr. 2004 à 12:34
echo "nom de l'image : $nom_imag
poids de la nouvelle image : $img_new_size octets
lien vers la nouvelle image
"; }
}
pyroflo
Messages postés323Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention17 mai 2005 11 févr. 2004 à 16:21
jerome_, tu as tout compris :) La boucle permet de remplir au mieux l'espace dédié à la miniature, par contre, en mettant directement les limites comme dimensions, les proportions ne seraient pas respectées du tout !
Pour ce qui est des PNG, chez moi je n'ai aucun problème ! Version de GD: 2.0.15
Tu as sûrment raison, ça doit venir de la transparence mais je n'en sais pas plus...
Pour les GIF, j'ai finalement retiré ce format pour l'upload d'image.
Trop chiant à mettre en oeuvre, théoriquement ma fonction devrait fonctionner mais depuis la version 1.5 (je crois), le GIF n'est plus supporté par GD à cause des droits etc...
En plus, lorsqu'on travaille avec un GIF animé....bon courage ! ;)
jerome_
Messages postés10Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention13 août 2010 11 févr. 2004 à 11:36
Merci pour l'algo ca m'a donné un bon début pour commencer ;)
Par contre je comprend pas pourquoi tu fais unwhile pour trouver ton rapport de réduction.
en fait ton while sert a te rapprocher de la taille maximale mais donc tu n'atteitn pas exactement la taille maxi précise. En gros ton $xF $maxX, et $yF $maxY.
Autre question plus importante, j utilise ton test pour voir si l image traitée est une Gif, Jpeg ou Png, mais dans le cas des gif et png, apres le traitement le fond de l image apparait noir, je crois que ca doit venir d un problème de transparence, pourrais tu m'aiguiller sur ce problème?
De plus j'arrive pas a afficher les images Gif si je fais un "imagegif()" pourtant j ai biens fais un "imagecreatefromgif()", par contre si je remplace le "imagegif()" par "imagejpg()" ca arrive a l'afficher.
l'"imagepng()" marche mais si je met "imagejpeg()" a la place ca donne le meme résultat.
pyroflo
Messages postés323Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention17 mai 2005 10 févr. 2004 à 18:00
psyjc, oui le rapport hauteur/largeur n'est pas vraiment respecté, c'est vrai, car pour mon utilisation les dimensions limites sont de 200*150 ça ressemble drôlement à un carré ;)
Et comme je ne souhaite pas faire des miniatures vraiment toutes petites (ex: 70*120)...
Ma fonction convient à mes besoins, à vous de la personnaliser :p
bonjovi51
Messages postés51Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention14 décembre 2006 10 févr. 2004 à 16:15
Marche pas ton lien !!
bonjovi51
Messages postés51Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention14 décembre 2006 10 févr. 2004 à 13:53
Je te remercie pour les précisions. Si je vois une erreur, je l'annonce !!
psyjc
Messages postés182Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention18 avril 2008 10 févr. 2004 à 13:39
pour celle que jai donné, a la base elle fonctionne pour GD1.x et GD2
seulement pour l'exemple ci dessus, jai epuré juste au nessaissaire (en gardant uniquement pour GD2)
la version complete du script est a l'adresse que jai donné en demo, il faut le telecharger.
le reel probleme est quil est difficile de reperer automatiquement sur un serveur si il utilise GD1.x ou GD2 sans provoquer d'erreur!
bonjovi51
Messages postés51Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention14 décembre 2006 10 févr. 2004 à 12:29
Est ce que toutes versions de GD supportent cette version? Je sais que beaucoup d'hébergeur utilise la version 1.6 et que les fonctions que vous créez sont pour les version 2.0 ou +.
Ce serait bien d'adapter les fonctions pour toutes les versions.....
@+ et merci d'ajouter des fonctions qui sont utiles pour nous autres....
psyjc
Messages postés182Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention18 avril 2008 10 févr. 2004 à 10:52
hum
le rapport hauteur/largeur ne semble pas etre conservé!
j'utilise ca:
$IMAGE_TN_SIZE = 80 // Taille maximal a ne pas depassé (largeur ou hauteur)
pyroflo
Messages postés323Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention17 mai 2005 9 févr. 2004 à 19:28
Y a pas de soucis ;p
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 9 févr. 2004 à 19:27
Désolé j'ai pas regardé le code en détail mais juste le texte : "Je cherchais à faire des miniatures devant être affichées dans des tableaux, donc elles ne devaient pas dépasser X pixel de largeur et Y de hauteur."
C'est pour ça je n'ai pas approfondi. Tu réduis la taille de l'image et ensuite tu la redimensionnes. Ok Ok
a +
pyroflo
Messages postés323Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention17 mai 2005 9 févr. 2004 à 19:22
Salut,
tu ne crées pas de miniature, tu modifies seulement l'affichage dans le tag donc l'image est chargée entièrement même si tu l'affiches 6 fois plus petite...
Tu vois le truc ?
Imagines une galerie de 20 * 20ko !
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 9 févr. 2004 à 19:13
Salut !
Voici le code que j'utilise pour mon site :
$image="photos/1.jpg"; //EXEMPLE D'IMAGE
if (file_exists($image))
{
list($width, $height, $type, $attr) = getimagesize("$image");
if (($width)>100) //SI L'IMAGE FAIT PLUS DE 100PX de LARGE
{
$contenu.='
';
}
else
{
$contenu.='
';
}
}
11 nov. 2011 à 01:34
Ce tuto super bien fait date un peu maintenant mais je viens de le trouver en faisant une recherche pour redimensionner des images online.
J'ai recopié le code intégralement en modifiant les chemins.
Cependant à la fin l'image créée et enregistrée est noire.
Que faire ?
Avez-vous la solution ?
D'avance merci
10 nov. 2011 à 11:25
Ce tuto date et j'espère que quelqu'un pourra me répondre.
J'ai appliqué exactement le même code que ci-dessus en modifiant juste les chemins des images.
La fonction crèe bien une miniature mais cette miniature est noire. L'image initiale n'est pas associée.
Que faire ?
Merci
28 oct. 2005 à 12:49
4 août 2005 à 11:28
4 août 2005 à 04:02
Voilà le script de Pyroflo a l'air parfait pour mes besoins, donc merci à lui déjà.
Le seul soucis c'est que j'ai recopié tel quel le code en changeant bien evidement les variables de la fonction MakeThumb en MakeThumb('test.jpg',200,150); mais ca ne marche pas.
Voilà donc rien de bien méchant mais j'ai ce message d'erreur:
Warning: imagejpeg(): Unable to open 'images/mini_est.jpg' for writing in /home/www/image.php on line 46
Bon je débute donc excusez moi si je vous fait répeter. De plus j'ai fait un phpinfo(); j'ai GD2 donc je comprends pas.
Merci d'avance
8 juil. 2004 à 13:23
8 juil. 2004 à 13:20
8 juil. 2004 à 12:51
8 juil. 2004 à 12:49
genre tu envoye une image en 1600x1200 et t veux qu'elle soit redimentionnée en : 1600*1200, 1280*960, 1024*768, 640*480, 576*384, 160*120, 80*60 ben tu met simplement les valeurs dans le array, et le script se charge de tout faire lui même en renommant les fichier suivant cette règle $nom_du_fichier."_".$taille.".jpg";
c'est vachement plus imple nan ???
8 juil. 2004 à 12:24
Donc voilà en gros ce que je fait:
On donne a la fonction une image :
Taille[1]
+-----------------+ T
| | a
| | i
| image | l
| | l
| | e
+-----------------+[0]
Maintenant on lui donne un rectangle :
largeur
+--------+
| | h
| | a
| | u
| recta | t
| ngle | e
| | u
| | r
| |
+--------+
Pour rentre l'image dans ce rectangle, en touchant deux bords, il y'a deux solutions :
Soit que le bord du haut touche le bord du haut, et le bord du bas touche le bord du bas, donc en definisant que la nouvelle image a pour hauteur la hauteur du rectangle, en appliquant le ratio (hauteur/largeur), on obtient la largeur nécéssairepour avoir une image proportionel, si cette valeur est plus grande que la largeur du rectangle.
Si la largeur ainsi définie est plus grande que la largeur du rectangle, on recommence en appliquant ce petit algorythme directement a la largeur
Est ce clair ?
LOL
@+++ tlm
8 juil. 2004 à 01:07
Pour les boucles, je pensais pouvoir me rapprocher de la veleur minimale en "tatonnant".
8 juil. 2004 à 01:04
<?
$image=imagecreatefromjpeg($addr);
$taille=getimagesize($addr);
$ratio=$taille[0]/$taille[1];
$hauteur2=$largeur*$ratio;
$largeur2=$hauteur/$ratio;
if($hauteur2<=$hauteur) $largeur2=$largeur;
else $hauteur2=$hauteur;
$image2=imagecreate($hauteur2,$largeur2);
imagecopyresized($image2,$image,0,0,0,0,$hauteur2,$largeur2,$taille[0],$taille[1]);
imagejpeg($image2);
?>
Vala...
7 juil. 2004 à 15:51
Pour que l'image $addr rentre dans le rectangle de dimension $hauteur, $largeur, en touchant au moins un des bords
<? $image=imagecreatefromjpeg($addr);
$taille=getimagesize($addr);
$ratio=$taille[0]/$taille[1];
if($ratio>1)
{$largeur2=$largeur;
$hauteur2=$largeur/$ratio;}
else
{$hauteur2=$hauteur;
$largeur2=$hauteur/$ratio;}
$image2=imagecreate($largeur2,$hauteur2);
imagecopyresized($image2,$image,0,0,0,0,$largeur2,$hauteur2,$taille[0],$taille[1]);
imagejpeg($image2); ?>
ça tiens en 15 lignes... pourquoi faire une boucle ?
20 avril 2004 à 16:32
19 avril 2004 à 20:59
par contre, j'ai eu un problème parceque moi je n'avais pas qu'un seul sous dossier, et ton script n'est fait pour en gérer qu'un car :
> substr($img,strpos($img,'/') + 1)
--> Va chercher la première occurence de "/".
Je te conseille plutôt de metre :
> substr(strrchr($img, "/"), 1)
--> qui va chercher la derniève occurence de "/" et donc supprimer tous le chemin à l'image :)
En tout cas encore merci pour lsa source :)
14 mars 2004 à 13:56
<?php
$DestinationFolder = "../image-bdd/";
$img = $row_LastPhoto['file'];
$maxX = 1000;
$maxY = 750;
function MakeThumb($img,$maxX,$maxY) {
// Récupération des infos sur l'image
$TImage = getimagesize($DestinationFolder.$img);
// Rapport initial: aucune réduction
$rapport = 1;
// Si la largeur de l'image est supérieure à la limite
if ($TImage[0] > $maxX)
// Tant que la largeur réduite est supérieure à la limite
while ($TImage[0] / $rapport > $maxX)
// Augmentation de la réduction
$rapport = $rapport + 0.5;
// Assignation de la largeur finale
$xF = $TImage[0] / $rapport;
// Si la hauteur de l'image est supérieure à la limite
// Si non, le rapport est le même que celui utilisé pour la largeur
if ($TImage[1] > $maxY)
// Tant que la hauteur réduite est supérieure à la limite
while ($TImage[1] / $rapport > $maxY)
// Augmentation de la réduction
$rapport = $rapport + 0.5;
// Assignation de la hauteur finale
$yF = $TImage[1] / $rapport;
// Récupération du handle de l'image selon son format
switch($TImage[2]) {
case 1:
$imageF = imagecreatefromgif($DestinationFolder.$img);
break;
case 2:
$imageF = imagecreatefromjpeg($DestinationFolder.$img);
break;
case 3:
$imageF = imagecreatefrompng($DestinationFolder.$img);
break;
}
// Création de la miniature
$thumbF = imagecreatetruecolor($xF,$yF);
// Compatibilité: imagecopyresized($thumbF,$imageF,0,0,0,0,$xF,$yF,$TImage[0],$TImage[1]);
imagecopyresampled($thumbF,$imageF,0,0,0,0,$xF,$yF,$TImage[0],$TImage[1]);
// Envoie de l'image au navigateur selon son format
switch($TImage[2]) {
case 1:
imagegif($thumbF,'../image-bdd/maxi_'.substr($img,strpos($img,'/') + 1), 60);
break;
case 2:
imagejpeg($thumbF,'../image-bdd/maxi_'.substr($img,strpos($img,'/') + 1), 60);
break;
case 3:
imagepng($thumbF,'../image-bdd/maxi_'.substr($img,strpos($img,'/') + 1), 60);
break;
}
// Libération de la mémoire
imagedestroy($thumbF);
imagedestroy($imageF);
}
?>
<?php
unlink("../image-bdd/".$row_LastPhoto['file']);
echo "l'image a originale a été effacée.";
?>
22 févr. 2004 à 10:26
pour un exemple de galerie, http://www.sepu-design.com/
allez dans la partie productions
voili voilou
21 févr. 2004 à 21:25
21 févr. 2004 à 21:20
$matrix_redim = array ("1024","768","800","600","640","480","160","120","80","60");
et le tour est joué, dans ce cas là tout les redimentionnements vont êtres faits, et l'image en 1280x960 supprimée d'elle même, en plus les images crées auront en extension "_$taille".
voilà le pourquoi du comment... lol
21 févr. 2004 à 15:28
pk tu n'a pas fait ca?
// Si la largeur de l'image est supérieure à la limite
if ($TImage[0] > $maxX)
$rapport = $TImage[0] / $maxX;
Enfin merci qd meme.
16 févr. 2004 à 12:34
$original_size = getimagesize($_FILES['image']['tmp_name']);
$original_larg = $original_size[0];
$original_haut = $original_size[1];
echo "largeur : $original_larg
";
echo "longueur : $original_haut
";
$acceptedTypes = array('image/jpeg', 'image/jpg', 'image/pjpeg');
if(!in_array($_FILES['image']['type'], $acceptedTypes) || trim($_FILES['image']['tmp_name']) == "" || trim($_FILES['image']['tmp_name']) =="none")
{
echo "format image non valide, image jpeg seulement";
}
else
{ echo "
format valide
";
$nom_fichier = explode(".", $_FILES['image']['name']);
$nom = str_replace(' ', '_', $nom_fichier[0]);
$img_original = ImageCreateFromJpeg($_FILES['image']['tmp_name']);
$matrix_redim = array ("640","480","160","120");
$nbr = count ($matrix_redim) / 2;
for ($idx = 0; $idx < $nbr; ++$idx)
{
$IMG_LARG = $matrix_redim[$idx*2];
$IMG_HAUT = $matrix_redim[$idx*2+1];
if($original_larg <= $IMG_LARG && $original_haut <= $IMG_HAUT)
{
echo "
l'image n'a pas besoin d'être redimensionnée en $IMG_LARG*$IMG_HAUT";
$img_renamed = "../../imagesprod/$nom" . "_$IMG_LARG.jpg";
ImageJPEG($img_original, $img_renamed);
} else {
$ratio_v = $IMG_LARG / $original_larg;
$ratio_h = $IMG_HAUT / $original_haut;
$ratio = $ratio_v < $ratio_h ? $ratio_v:$ratio_h;
$img_new_larg = round($original_larg * $ratio);
$img_new_haut = round($original_haut * $ratio);
echo "
redimensionnement en $IMG_LARG*$IMG_HAUT... après redimensionnement : largeur $img_new_larg ; longueur $img_new_haut
";
$img_resized = imagecreatetruecolor($img_new_larg, $img_new_haut);
imagecopyresampled($img_resized, ImageCreateFromJpeg($_FILES['image']['tmp_name']), 0 , 0 , 0 , 0, $img_new_larg, $img_new_haut, $original_larg, $original_haut);
$nom_imag = "$nom"."_$IMG_LARG.jpg";
Imagejpeg($img_resized, "../../imagesprod/$nom_imag");
ImageDestroy($img_resized);
$img_new_size = filesize("../../imagesprod/$nom_imag");
echo "nom de l'image : $nom_imag
poids de la nouvelle image : $img_new_size octets
lien vers la nouvelle image
"; }
}
11 févr. 2004 à 16:21
Pour ce qui est des PNG, chez moi je n'ai aucun problème ! Version de GD: 2.0.15
Tu as sûrment raison, ça doit venir de la transparence mais je n'en sais pas plus...
Pour les GIF, j'ai finalement retiré ce format pour l'upload d'image.
Trop chiant à mettre en oeuvre, théoriquement ma fonction devrait fonctionner mais depuis la version 1.5 (je crois), le GIF n'est plus supporté par GD à cause des droits etc...
En plus, lorsqu'on travaille avec un GIF animé....bon courage ! ;)
11 févr. 2004 à 11:36
Par contre je comprend pas pourquoi tu fais unwhile pour trouver ton rapport de réduction.
tu fais:
imagecopyresampled($thumbF,$imageF,0,0,0,0,$xF,$yF,$TImage[0],$TImage[1]);
mais ceci fais pareil non?:
imagecopyresampled($thumbF,$imageF,0,0,0,0,$maxX,$maxY,$TImage[0],$TImage[1]);
en fait ton while sert a te rapprocher de la taille maximale mais donc tu n'atteitn pas exactement la taille maxi précise. En gros ton $xF $maxX, et $yF $maxY.
Autre question plus importante, j utilise ton test pour voir si l image traitée est une Gif, Jpeg ou Png, mais dans le cas des gif et png, apres le traitement le fond de l image apparait noir, je crois que ca doit venir d un problème de transparence, pourrais tu m'aiguiller sur ce problème?
De plus j'arrive pas a afficher les images Gif si je fais un "imagegif()" pourtant j ai biens fais un "imagecreatefromgif()", par contre si je remplace le "imagegif()" par "imagejpg()" ca arrive a l'afficher.
l'"imagepng()" marche mais si je met "imagejpeg()" a la place ca donne le meme résultat.
10 févr. 2004 à 18:00
Et comme je ne souhaite pas faire des miniatures vraiment toutes petites (ex: 70*120)...
Ma fonction convient à mes besoins, à vous de la personnaliser :p
10 févr. 2004 à 16:15
10 févr. 2004 à 13:53
10 févr. 2004 à 13:39
seulement pour l'exemple ci dessus, jai epuré juste au nessaissaire (en gardant uniquement pour GD2)
la version complete du script est a l'adresse que jai donné en demo, il faut le telecharger.
le reel probleme est quil est difficile de reperer automatiquement sur un serveur si il utilise GD1.x ou GD2 sans provoquer d'erreur!
10 févr. 2004 à 12:29
Ce serait bien d'adapter les fonctions pour toutes les versions.....
@+ et merci d'ajouter des fonctions qui sont utiles pour nous autres....
10 févr. 2004 à 10:52
le rapport hauteur/largeur ne semble pas etre conservé!
j'utilise ca:
$IMAGE_TN_SIZE = 80 // Taille maximal a ne pas depassé (largeur ou hauteur)
$handle = @imagecreatefromjpeg($relatif_link);
$x=imagesx($handle);
$y=imagesy($handle);
//echo "X:$x | Y:$y
";
# 100
if($x>$y){ # |-------------|
$max=$x; # +-------------+ - -
$min=$y; # | | |
} # | | |
if($x<=$y){ # | img | |100
$max=$y; # | | |
$min=$x; # | | |
} # +-------------+ - -
if($max==$x){
$qq=$max/$IMAGE_TN_SIZE;
}
if($max==$y){
$qq=$max/$IMAGE_TN_SIZE;
}
$dest_x=$x/$qq;
$dest_y=$y/$qq;
if($dest_x > $x) {
$dest_x = $x;
$dest_y = $y;
}
$dst_img = imageCreatetruecolor($dest_x,$dest_y);
imagecopyresized($dst_img, $handle, 0, 0, 0, 0,$dest_x, $dest_y, $x, $y);
imagejpeg($dst_img,'', $IMAGE_TN_COMPRESSION);
imagedestroy($handle);
imagedestroy($dst_img);
qui marche impec : demo ici : http://jcjcjcjc.free.fr/server/
9 févr. 2004 à 19:28
9 févr. 2004 à 19:27
C'est pour ça je n'ai pas approfondi. Tu réduis la taille de l'image et ensuite tu la redimensionnes. Ok Ok
a +
9 févr. 2004 à 19:22
tu ne crées pas de miniature, tu modifies seulement l'affichage dans le tag donc l'image est chargée entièrement même si tu l'affiches 6 fois plus petite...
Tu vois le truc ?
Imagines une galerie de 20 * 20ko !
9 févr. 2004 à 19:13
Voici le code que j'utilise pour mon site :
$image="photos/1.jpg"; //EXEMPLE D'IMAGE
if (file_exists($image))
{
list($width, $height, $type, $attr) = getimagesize("$image");
if (($width)>100) //SI L'IMAGE FAIT PLUS DE 100PX de LARGE
{
$contenu.='
';
}
else
{
$contenu.='
';
}
}
Facile ensuite de le transformer en fonction
a +