WRInaute passionné
Comme promis dans le post https://www.webrankinfo.com/forum/t/script-mise-en-cache-des-pages-php.28614/ j'ouvre un nouveau fil pour proposer une autre astuce! (j'ai lancé l'idée en espérant être suivi, car à raison d'une astuce par jour, je porrais pas tenir six mois! :wink: ) Alors webmasters, reveillez-vous! vous avez surement des codes à partager! et puis, si ça marche, ça pourrait faire l'objet d'un forum spécifique sur wri!
bon. on y vas...
ceux qui ont visité le site de mon profil ont du constater qu'il y avait beaucoups d'images de differentes tailles (affiches de films ou wallpapers)
avec plus de 8000 affiches et 2500 wallpapers en trois tailles différentes je m'ammuse pas à faire les recadrages à la main, c'est php qui fait ça, et il le fait une bonne fois pour toute et il fait cela lorsque j'iploade l'image sur le serveur.
Comme pour mon précédant fil, vous pouvez m'insulter si le truc est archi connu! :wink:
Comment ça marche?
Prennons l'exemple d'une affiche de film: Elle existe sous trois format (sa taille originale, une taille reduite sur la fiche du film en 260 pixels de large, 185 pixels de haut et une miniature en 85 pixels de large un peu partout ailleurs sur le site)
le principe est de lire les caracteristiques de l'image originale avec la fonction php getimagesize(), puis de creer une image à partir de son url avec imagecreatefromjpeg(), ensuite on calcule la taille des images à générer puis on les fabrique avec le couple de fonctions imagecreatetruecolor () et
imagecopyresampled (), à la fin on renvoi un header("Content-Type: image/jpeg") pour voir le resultat.
voici le code commenté:
dans la page appelant le script on met:
Attention! ce genre de script consomme pas mal de ressources mémoire (c'est pour cela que je le lance lorsque j'uploade de nouvelle images) Il peut être nécessaire selon la taille de l'image d'allouer plus de mémoire au script en ajoutant dans le .htaccess:
voilà! c'est tout.
bon. on y vas...
ceux qui ont visité le site de mon profil ont du constater qu'il y avait beaucoups d'images de differentes tailles (affiches de films ou wallpapers)
avec plus de 8000 affiches et 2500 wallpapers en trois tailles différentes je m'ammuse pas à faire les recadrages à la main, c'est php qui fait ça, et il le fait une bonne fois pour toute et il fait cela lorsque j'iploade l'image sur le serveur.
Comme pour mon précédant fil, vous pouvez m'insulter si le truc est archi connu! :wink:
Comment ça marche?
Prennons l'exemple d'une affiche de film: Elle existe sous trois format (sa taille originale, une taille reduite sur la fiche du film en 260 pixels de large, 185 pixels de haut et une miniature en 85 pixels de large un peu partout ailleurs sur le site)
le principe est de lire les caracteristiques de l'image originale avec la fonction php getimagesize(), puis de creer une image à partir de son url avec imagecreatefromjpeg(), ensuite on calcule la taille des images à générer puis on les fabrique avec le couple de fonctions imagecreatetruecolor () et
imagecopyresampled (), à la fin on renvoi un header("Content-Type: image/jpeg") pour voir le resultat.
voici le code commenté:
Code:
<?php
$url_img=$_GET["image"];
$conn_id = ftp_connect($ftpHost);
$login_result = ftp_login($conn_id, $ftpLogin, $ftpPwd); // on se connecte en ftp
@ftp_mkdir ( $conn_id, "chemin vers le repertoire 1"); // si le repertoire ou stocker l'image originale n'existe pas on le crée
@ftp_site ($conn_id, "CHMOD 777 chemin vers le repertoire 1"); // on donne les droit d'accés à ce répertoire
@ftp_mkdir ( $conn_id, "chemin vers le repertoire 2"); // idem pour le repertoire ou on veut stocker le format 85px
@ftp_site ($conn_id, "CHMOD 777 chemin vers le repertoire 2");
@ftp_mkdir ( $conn_id, "chemin vers le repertoire 3");// idem pour le repertoire ou on veut stocker le format 190px par 260
@ftp_site ($conn_id, "CHMOD 777 chemin vers le repertoire 3");
list($imx, $imy, $type, $attr) = getimagesize($url_img); //lecture des caracteristiques de l'image à traiter
$ims=imagecreatefromjpeg ($url_img); // création de l'image en mémoire à partir de son url
imagejpeg($ims,"nom de l'image jpeg",80);// on stocke l'image originale avec un facteur qualité de 80%
$ratiox=$imx/190; // on calcule le rapport de réduction en x
$ratioy=$imy/260;// on calcule le rapport de réduction en y
if($ratiox>$ratioy) { // comme on veut pas déformer l'image, on fait un test pour qu'elle s'incrive dans le rectangle 185x260
$imd=imagecreatetruecolor (floor($imx/$ratiox),floor($imy/$ratiox));// on fabrique l'image
imagecopyresampled ($imd,$ims,0,0,0,0, floor($imx/$ratiox),floor($imy/$ratiox),$imx,$imy);// on la stocke
} else {
$imd=imagecreatetruecolor (floor($imx/$ratioy),floor($imy/$ratioy));// on fabrique l'image
imagecopyresampled ($imd,$ims,0,0,0,0, floor($imx/$ratioy),floor($imy/$ratioy),$imx,$imy);// on la stocke
}
// on refait la même opération pour l'mage miniature
imagejpeg($imd,"nom de l'image jpeg",80);
imagedestroy($imd);// on detruit la ressource image qui n'est plus utile
$ratiox=$imx/85;
$imd=imagecreatetruecolor (floor($imx/$ratiox),110);
imagecopyresampled ($imd,$ims,0,0,0,0, floor($imx/$ratiox),floor($imy/$ratiox),$imx,$imy);
imagejpeg($imd,"nom de l'image jpeg",80);
imagedestroy($ims);// on detruit la ressource image qui n'est plus utile
@ftp_site ($conn_id, "CHMOD 755 chemin vers le repertoire 1"); // on protege à nouveau l'accés au repertoire 1
@ftp_site ($conn_id, "CHMOD 755 chemin vers le repertoire 2"); // on protege à nouveau l'accés au repertoire 21
@ftp_site ($conn_id, "CHMOD 755 chemin vers le repertoire 3"); // on protege à nouveau l'accés au repertoire 3
ftp_quit($conn_id); // on ferme la session ftp
header("Content-Type: image/jpeg"); // on crée une entête image jpg
imagejpeg ($imd); // on retourne l'image miniature
imagedestroy($imd); // on detruit la ressource image qui n'est plus utile
?>
dans la page appelant le script on met:
Code:
<img src="nomduscript.php?image=url de l'image à traiter">
Attention! ce genre de script consomme pas mal de ressources mémoire (c'est pour cela que je le lance lorsque j'uploade de nouvelle images) Il peut être nécessaire selon la taille de l'image d'allouer plus de mémoire au script en ajoutant dans le .htaccess:
Code:
php_value memory_limit 64M
voilà! c'est tout.