Galerie photos: Miniature + rognage [Résolu]

Signaler
Messages postés
18
Date d'inscription
vendredi 11 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2010
-
Messages postés
1
Date d'inscription
lundi 12 juillet 2010
Statut
Membre
Dernière intervention
12 juillet 2010
-
Bonjour,

Je suis à la recherche de 2 scripts:

le premier permettant de miniaturiser une image, tout en gardant les proportions.

Le second dans le but de découper les bords de l'image miniaturisée afin d'en obtenir une vignette.

Vous l'aurez compris, dans le but de créer une galerie photos.

Si une personne à déjà travaillé sur ce topic et que cela ne la dérange pas de partager son code, afin que j'en comprenne le fonctionnement, je lui en serai reconnaissant.

Cordialement.

14 réponses

Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

salut voici deux fonction la premiere redimensionne et l'autre rogne l'image attention dans les deux cas je redimensionne sans se soucier si la largeur et la hauteur de l'image source source sont plus petit que ceux specifier a l'apple de la fonction mais je crois que ca sera facile pour toi de l'integrer au besoin
<?php 
function redimImage($source,$destination,$Wmax, $Hmax,$ext) {
// recuperation des dimensions de l image Src
$size = getimagesize($source);
$W = $size[0]; // largeur
$H = $size[1]; // hauteur
    // Calcul du ratio
$ratiox = $W / $Wmax; // ratio en largeur
$ratioy = $H / $Hmax; // ratio en hauteur
$ratio = max($ratiox,$ratioy); // le plus grand
$W = $W/$ratio;
$H = $H/$ratio;
//Creation de la ressource source suivant l'extension
switch($ext) {
case 'jpg':
case 'jpeg':
$Src = imagecreatefromjpeg($source);
break;
case 'png':
$Src = imagecreatefrompng($source);
break;
}
    // Creation de la ressource destination suivant l'extension
switch($ext) {
case 'jpg':
case 'jpeg':
$Dest = imagecreatetruecolor($W,$H);
break;
case 'png':
$Dest = imagecreatetruecolor($W,$H);
// fond transparent (pour les png avec transparence)
imagesavealpha($Dest, true);
$trans_color = imagecolorallocatealpha($Dest, 0, 0, 0, 127);
imagefill($Dest, 0, 0, $trans_color);
break;
}
// REDIMENSIONNEMENT+COPIE
imagecopyresampled($Dest, $Src, 0, 0, 0, 0, $W, $H, $size[0], $size[1]);
// ENREGISTREMENT 
switch ($ext) {
case 'jpg':
case 'jpeg':
imagejpeg ($Dest,$destination);
break;
case 'png':
imagepng ($Dest,$destination);
break;
}
// liberation des ressources-image
imagedestroy ($Src);
imagedestroy ($Dest);
// si le fichier a bien ete cree
if( file_exists($destination)) { 
return true; 
} else { 
    return false; 
}
}
function cropImage($source,$destination,$Wmax, $Hmax,$ext) {
// recuperation des dimensions de l image Src
$size = getimagesize($source);
$W = $size[0]; // largeur
$H = $size[1]; // hauteur
//Creation de la ressource source suivant l'extension
switch($ext) {
case 'jpg':
case 'jpeg':
$Src = imagecreatefromjpeg($source);
break;
case 'png':
$Src = imagecreatefrompng($source);
break;
}
    // Creation de la ressource destination suivant l'extension
switch($ext) {
case 'jpg':
case 'jpeg':
$Dest = imagecreatetruecolor($W,$H);
break;
case 'png':
$Dest = imagecreatetruecolor($W,$H);
// fond transparent (pour les png avec transparence)
imagesavealpha($Dest, true);
$trans_color = imagecolorallocatealpha($Dest, 0, 0, 0, 127);
imagefill($Dest, 0, 0, $trans_color);
break;
}
// REDIMENSIONNEMENT+COPIE
imagecopyresampled($Dest, $Src, 0, 0, 0, 0, $W, $H, $size[0], $size[1]);
// ENREGISTREMENT 
switch ($ext) {
case 'jpg':
case 'jpeg':
imagejpeg ($Dest,$destination);
break;
case 'png':
imagepng ($Dest,$destination);
break;
}
// liberation des ressources-image
imagedestroy ($Src);
imagedestroy ($Dest);
// si le fichier a bien ete cree
if( file_exists($destination)) { 
return true; 
} else { 
    return false; 
}
}
?>


CORDIALEMENT
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

salut pour utiliser ces deux fonction t'a pas besoin de faire un header
il suffit de faire appele a celle-ci
//REDIMEN
/**
 * @params String nom_imageSource,String nom_imageDestination,int largeur_final,int hauteur,final
* @return Bool
 */
if(redimImage('avatar.jpg','avatar2.jpg','150','80','jpg')) {
   echo "image redimensionner";
} else {
  echo "image non redimentionner";
}

pour la deuxieme fonction j'avais fait une erreur en copiant le code je rectifie donc
function cropImage($source,$destination,$W_f, $H_f,$ext) {
// recuperation des dimensions de l image Src
$size = getimagesize($source);
$W_s = $size[0]; // largeur
$H_s = $size[1]; // hauteur
// crop aux dimensions indiquees
if ($W_f != 0 && $H_f != 0) {
$W = $W_f;
$H = $H_f;
} 

// meme largeur que la source)
if ($W_f == 0 && $H_f != 0) {
$H = $H_f;
$W = $W_s;
}

// meme hauteur que la source
if ($W_f !0 && $H_f 0) {
$W = $W_f;
$H = $H_s;
}
// crop "carre" 
if ($W_f == 0 && $H_f== 0) {
if ($W_s >= $H_s) {
$W = $H_s;
$H = $H_s;
} else {
$W = $W_s;
$H = $W_s;
}
}
//Creation de la ressource source suivant l'extension
switch($ext) {
case 'jpg':
case 'jpeg':
$Src = imagecreatefromjpeg($source);
break;
case 'png':
$Src = imagecreatefrompng($source);
break;
}
    // Creation de la ressource destination suivant l'extension
switch($ext) {
case 'jpg':
case 'jpeg':
$Dest = imagecreatetruecolor($W,$H);
// fond blanc
$blanc = imagecolorallocate ($Dest, 255, 255, 255);
imagefill ($Dest, 0, 0, $blanc);
break;
case 'png':
$Dest = imagecreatetruecolor($W,$H);
// fond transparent (pour les png avec transparence)
imagesavealpha($Dest, true);
$trans_color = imagecolorallocatealpha($Dest, 0, 0, 0, 127);
imagefill($Dest, 0, 0, $trans_color);
break;
}
// CENTRAGE en largeur
if ($W_f == 0) {
if ($H_f == 0 && $W_s < $H_s) {
$X_s = 0;
$X_d = 0;
$W_c = $W_s;
} else {
$X_s = 0;
$X_d = ($W - $W_s) /2;
$W_c = $W_s;
}
} else {
if ($W_s > $W) {
$X_s = ($W_s - $W) /2;
$X_d = 0;
$W_c = $W;
} else {
$X_s = 0;
$X_d = ($W - $W_s) /2;
$W_c = $W_s;
}
}
// CENTRAGE en hauteur
if ($H_f == 0) {
if ($W_f == 0 && $H_s < $W_s) {
$Y_s = 0;
$Y_d = 0;
$H_c = $H_s;
} else {
$Y_s = 0;
$Y_d = ($H - $H_s) /2;
$H_c= $H_s;
}
} else {
if ($H_s > $H) {
$Y_s = ($H_s - $H) /2;
$Y_d = 0;
$H_c = $H;
} else {
$Y_s = 0;
$Y_d = ($H - $H_s) /2;
$H_c = $H_s;
}
}
//Copie
imagecopyresampled($Dest, $Src, $X_d, $Y_d, $X_s, $Y_s, $W_c, $H_c, $W_c, $H_c);
// ENREGISTREMENT 
switch ($ext) {
case 'jpg':
case 'jpeg':
imagejpeg ($Dest,$destination);
break;
case 'png':
imagepng ($Dest,$destination);
break;
}
// liberation des ressources-image
imagedestroy ($Src);
imagedestroy ($Dest);
// si le fichier a bien ete cree
if( file_exists($destination)) { 
return true; 
} else { 
    return false; 
}
}

pour cette fonction sont utilisation est le même que la premiere sauf que ici si tu veut conserver une proportion remplace la par zero
/**
 * @params String nom_imageSource,String nom_imageDestination,int largeur_final,int hauteur,final
* @return Bool
 */
//ici on conserve la hauteur
if(cropImage('avatar.jpg','avatar2.jpg','150','0','jpg')) {
   echo "image redimensionner";
} else {
  echo "image non redimentionner";
}
Messages postés
18
Date d'inscription
vendredi 11 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2010

Voilà, enfin ! Sujet résolu.

Donc, à tous ceux étant dans la détresse pour la manipulation d'images à l'aide de PHP:

1. Utilisez une version php 4 ou supérieur (la plus récente étant la meilleure).

2. Copiez / Collez les scripts que monsieur Devil à gracieusement préparé.

3. N'utilisez pas le '@' dans les fonctions, elles sont déjà toutes faites. N'utilisez pas non plus le header('Content-Image: image/jpg'); !

4. Vérifiez le fichier php.ini se trouvant dans le répertoire du fichier de configuration de votre serveur local (pour mon cas wamp5) et faites une recherche de la ligne suivante: ;extension=php_gd2.dll, (petit rappel: l'extension .dll est utilisé pour les systèmes d'exploitations Windows).

5. Supprimez le ';' de la ligne, celle-ci ne fait que mettre en commentaire la ligne. A présent redémarrez votre serveur local, et vous pourrez utilisé sans problème les fonctions d'images.

Un grand merci à monsieur Devil pour sa patience, ses réponses ainsi que sa générosité.
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

ah j'avais oublier les deux fonction return true en cas de succes ou false dans le cas contraire
Messages postés
18
Date d'inscription
vendredi 11 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2010

Merci infiniment Devil, avec cela, ça va aller nickel
Messages postés
18
Date d'inscription
vendredi 11 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2010

Devil, j'ai utilisé ton script pour créer une miniature, mais aucune image ne se crée dans le dossier de destination.

Lors de l'exécution du script, le symbole représentant une image manquante apparait dans ma fenêtre de mon navigateur.

J'ai vérifié que mon serveur local (wamp5) soit configuré pour utiliser la bibliothèque GD et cela semble être le cas, ainsi que les liens pointant sur mes photos et dossier. De plus j'ai lu que l'OS était important et je travail sous WIN7, donc je ne comprends pas ce que je dois faire de plus.

J'ai encore ajouter le code suivant avant l'appelle de ta fonction:

header('Content-Type: image/jpg');

Peux-tu, stp, m'aiguiller sur la procédure d'utilisation de ton script. Merci d'avance.
Messages postés
18
Date d'inscription
vendredi 11 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2010

Merci mille fois, je teste cela et je poste une réponse pour enrichir le topique.
Messages postés
18
Date d'inscription
vendredi 11 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2010

Alors voilà les nouvelles informations:

header('Content-Type: image/jpg'); est requis sinon je ne peux pas utiliser ta fonction de redimensionnement (j'ai pas encore testé celle pour rogner).

Ta fonction, je l'utilise également dans un if() mais le message à l'intérieur de ce dernier ne s'affiche pas.

Je ne suis pas un débutant en php, mais pourtant je n'arrive pas à utiliser ton script malgré que je le comprend.

Je ne me décourage pas pour autant, et je vais lire, ligne par ligne, les informations de php.net
Messages postés
18
Date d'inscription
vendredi 11 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2010

Ca avance gentillement, je t'ai parlé d'un problème avec le navigateur qui affichait un symbole d'un lien cassé pointant sur une image, ce que je ne t'ai pas dit c'est que j'utilise habituellement Chrome. J'ai alors utilisé IE7 pour voir ce que lui me disait et justement il m'indiquait que le problème venait de la fonction imagecreatefromjpeg().

Je suis allé sur php.net et il montrait une façon de procéder avec un @ devant la fonction, sans mentionner à quoi ce dernier pouvait bien servir. Je l'ai testé ainsi et maintenant, le symbole du lien cassé a disparu de Chrome pour apparaître sous IE; et toujours pas de nouvelle image dans le dossier de destination.

Comme je m'y connais absolument en rien en ce qui concerne les flux de sortie permettant de copier, puis de modeler une image avec du php, je fais appelle une fois de plus à tes connaissances, si tu as une idée au problème que je rencontre.

Merci d'avance. (encore)
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

header('Content-Type: image/jpg'); est requis sinon je ne peux pas utiliser ta fonction de redimensionnement

la fonction n'affiche pas l'image directement dans le navigateur donc le header est normalement unitule ici
Je suis allé sur php.net et il montrait une façon de procéder avec un @ devant la fonction, sans mentionner à quoi ce dernier pouvait bien servir.

je ne te conseille pas d'utiliser ca quand tu est en developpement car ca n'evite pas une erreur mais elle la cache donc meme si il y'a une function qui renvoie une erreur comme par exemple mysql_connect ou autre et que tu place le signe @ devant tu n'auras pas de message d'erreur
en plus j'ai oublier de te dire que ce code j'ai l'ai fait avec la version 2 de gd avec easyphp 5.3 donc avec la version 5.3 de php et je l'ai tester que sous firefox 3.5 et IE8
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

j'ai oublier aussi de mentionner l'incompatibilité de la fonction imagesavealpha() avec certain naviguateur qui ne supporte pas Le canal alpha //d'apres php.net
mais cette fonction est appeler seulement lors de la miniature des images png donc tu peut virer la partie qui gère le png si tu est sur que tes utilisateur ne feront pas appelle a ce type d'image ou que toi même empêche l'upload de celui-ci
Messages postés
18
Date d'inscription
vendredi 11 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2010

Bien, cela signifie donc que, soit l'erreur provient de ma version php, soit de la configuration de WAMP5.

J'utilise php v5.2.1, je suppose qu'elle est opérationnelle pour les images dynamiques.

Et pour la configuration GD, j'obtiens:

[b]Configure Command
cscript /nologo configure.js "--enable-snapshot-build" "--with-gd= shared"/b

Il me semble que --with-gd=shared doit être configuré en --with-gd =enable. Sais-tu quelque chose là dessus ?
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

non rien sur ce sujet vu je ne fait pas beaucoup appel a cette librairie mais
que donne phpinfos sur la libraire gd
Messages postés
1
Date d'inscription
lundi 12 juillet 2010
Statut
Membre
Dernière intervention
12 juillet 2010

Thanks for providing this information .Even I was searching to trim the edges of the small image to get a sticker. It proved to be great help.
Regards
data recovery services
http://www.datadoctor.biz