Redimensionner photo pour le web mobile

  1. Pages Webmaster
  2.  > 
  3. Programmation


Le web mobile ne peut permettre de charger des images de grande résolution. Il convient de les redimensionner. Pour ce faire utilisons PHP avec la bibliothèque GD, script en ligne.


Le web mobile ne peut permettre de charger des images de grande résolution. Les temps de téléchargement risquent d'être longs pour un affichage de surcroit sur un écran de petite taille.
Il convient donc de redimensionner ces images et ce à la volée.
Pour ce faire utilisons PHP avec la bibliothèque GD, et voyons le script en ligne.

La bibliothèque GD, disponible sur les hébergements WEB (peut être pas les hébergement gratuits) permet de redimensionner les images et ce sans avoir à télécharger l'image via FTP, GD va faire ça à la volée.
Pour notre problématique de web mobile, il va de plus falloir détecter la présence d'une image dans le source SQL ou texte et afficher ce code source avec l'image redimensionnée.
Etant donné que la bibliothèque GD est gourmande en CPU, il va également être nécessaire de tester si l'image n'a pas été redimensionnée au préalable. Il faut aussi prendre en compte qu'il peut y avoir plusieurs images et que les images inférieures à une taille donnée seront affichées en l'état. Ouf !

En pseudo code, cet algorithme va avoir la forme suivante :
Pour un article stocké en base :

Lecture de l'article
Pour chaque image trouvée
réduction de l'image et stockage dans un répertoire
remplacement image lu par image réduite
Autre image
Affichage de l'article



$line=$r1["texte"];
if (preg_match_all("|<img src="(.*)></img >|U", $line, $out)) { // ! </img>
$i=0;
foreach ($out as $v1) {
foreach ($v1 as $v2) {
$chaine = $out[1][$i];
if ($chaine) {
$line = mini($chaine,$line); // fonction de reduction
}
$i++;
}
}
}
print $line;



Le preg_match_all va aller chercher toutes les images correspondant à notre pattern et alimenter un tableau. Pour chaque image, on appelle la fonction de réduction / remplacement. Lorsque toutes les images sont traitées on affiche l'article avec les images réduites.

Voyons le coeur du sujet, la réduction de l'image à la volée.

Tout d'abord le pseudo code de l'algorithme :

Récupérer le nom de l'image
Récupérer le répertoire de l'image
Récupérer la dimension de l'image
Si la largeur de l'image est supérieure à une largeur donnée
On calcule un taux de réduction
On crée une copie de l'image source à la taille réduite
Sinon
Image réduite c'est l'image source
Fin si
On remplace l'image source par l'image réduite

Ce qui nous donne en PHP quelque chose comme




// fonction de miniature
function mini($chaine, $line) {

$findme ="/";
$pos = strrpos($chaine, $findme);
$npos=$pos++;
$rest = substr($chaine, $npos); // image.jpg" width="30" height="30" alt="_"
$pos= strpos($rest,"""); // recherche du " après l'extension
$image=substr($rest, 0, $pos); // nom de l'image
$doss = substr ($chaine, 0, $npos);
if (eregi("alt="(.*)"", $rest, $out)) {
$alt = $out[1];
}
$line=str_replace($chaine, reduit($doss, $image)." Alt="".$alt.""", $line);
return($line);
}

// fonction de reduction
function reduit($doss, $img1) {
$source = @imagecreatefromjpeg($doss.$img1); // La photo est la source
// Les fonctions imagesx et imagesy renvoient la larg et la haut d'une image
$largeur_source = @imagesx($source);
$hauteur_source = @imagesy($source);
$pref="small/"; // nom du répertoire vignettes
$img2=$pref.$img1;
$largeur_destination = 170; // taille destination réduite
if ($largeur_source > $largeur_destination ) // grande image
{
$taux=imagesx($source)/$largeur_destination; // on determine un taux
$hauteur_destination=intval($hauteur_source/$taux); // on l'applique
if (!file_exists($img2)) { // a t'on déja reduit ?
$destination = imagecreatetruecolor($largeur_destination, $hauteur_destination);
// On crée la miniature
@imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination,
$hauteur_destination, $largeur_source, $hauteur_source);
// On enregistre la miniature dans la var2
@imagejpeg($destination, $img2);
}
return ("".$img2."" width="".$largeur_destination.""
height="".$hauteur_destination.""");
}
else
{ // pas de reduction
$img1=$doss.$img1;
return ("".$img1."" width="".$largeur_source."" height="".$hauteur_source.""") ;
}

}




Le nom des variables ainsi que les commentaires doivent vous permettre de comprendre ce que l'on fait.
La largeur de 170 peut être adaptée, voire passée en variable pour réellement s'adapter à la taille de l'écran.
Encore faut-il avoir une base des différents mobiles et smart-phones du marché en constante évolution pour s'adapter, ou lire en direct la taille des écrans et redimensionner en conséquence (a suivre ...).


Téléchargement du script : le script initial avec les deux fonctions peut être directement téléchargé ici



Article écrit par Janol le 15/02/2009
(Hits 6186
- Catégorie : Programmation)

Faites passer - Imprimer

Commentaires

Cet article n'a pas encore été commenté.
Vous pouvez vous exprimer en remplissant le formulaire ci-dessous.


Autres publications Programmation

Améliorer Adsense via les annonces texte ou images
Google Adsense propose pour les pages web deux formats d'annonces et incite à utiliser le format image, quelles sont les améliorations à apporter.
(écrit le 11/03/2012 - 4.151 lectures)

Url en bit.ly sous ajax
Autre manière de calculer une url courte de type bit.ly et de profiter des traitements asynchrones possibles avec ajax
(écrit le 15/03/2010 - 4.230 lectures)

Optimiser l'API bit.ly pour un affichage plus rapide des pages
Bit.ly est le site permettant de raccourcir une url, et dont l'API permet de raccourcir à la volée. Hélas cette api peut ralentir l'affichage des pages, voyons comment intégrer l'API et afficher ses pages aussi vite qu'avant.
(écrit le 08/03/2010 - 4.307 lectures)

Intégrer l'API bit.ly pour twitter
Twitter, le réseau social, peut être alimenté par des articles de site web et efficacement lorsque les url ont été raccourcies. Voyons alors comment générer à la volée des url avec bit.ly et ce grâce à l'API proposée.
(écrit le 06/03/2010 - 6.787 lectures)

Dessiner dans une image avec PHP
Après avoir vu comment écrire dans une image, voyons comment dessiner dans une image puis écrire avec d'une part des polices de caractère et des couleurs, mais également des paramètres passés en variable.
(écrit le 23/02/2010 - 5.060 lectures)

Ecrire dans une image à la volée
Le langage PHP permet d'écrire dans une image à la volée afin par exemple d'y ajouter un texte en superposition. Cette fonction permet également de masquer l'url de l'image puisque crée par le serveur.
(écrit le 22/02/2010 - 5.288 lectures)

Passer au web version mobile
Comment procéder pour écrire son site en version mobile pour smartphone, pda ou téléphone mobile avec wap. Voyons comment appliquer un template dédié pour le web sur mobile.
(écrit le 09/02/2009 - 8.766 lectures)

Structure pour web mobile
Les pages web pour téléphone mobile ou pour smartphone ne se construisent pas de la même manière que pour un site web avec navigateur classique. Quelques limitations sont à prendre en compte, voyons ces points.
(écrit le 09/02/2009 - 7.251 lectures)

Faut-il externaliser ses scripts
Pour obtenir des temps de réponses corrects et si possible optimum, tout webmaster doit se poser la question de savoir si il faut externaliser les scripts d'un site web.
(écrit le 09/12/2008 - 5.519 lectures)

Reseau Social Friend connect
Google ouvre son réseau social Friend Connect aux autres plateforme et permet d'installer cet outil très facilement sur un site web.
(écrit le 05/12/2008 - 4.796 lectures)

Feuilles de styles statiques
Les feuilles de style dynamiques ne sont pas une bonne solution du coté de l'optimisation des pages web
(écrit le 09/11/2008 - 3.896 lectures)

Optimiser ses scripts
YSLOW propose de positionner ses scripts correctement dans ses pages web pour améliorer la vitesse de chargement.
(écrit le 05/10/2008 - 3.750 lectures)

Optimiser la lecture des feuilles de style
Cinquième règle YSLOW pour optimiser son site web : positionner les feuilles de styles correctement dans la page web.
(écrit le 01/10/2008 - 3.075 lectures)

YSLOW : composant compressé
Règle quatre pour optimiser les temps de réponse du serveur : compresser les composants de la page coté serveur.
(écrit le 20/09/2008 - 3.868 lectures)

Yslow : les pages dynamiques ou statiques sont persitantes
Règle numéro trois pour optimiser les temps de réponse du serveur : rendre persistantes ses pages web, qu'elles soient statiques ou dynamiques.
(écrit le 12/09/2008 - 3.390 lectures)

YSLOW : Réduire le nombre de requêtes
Règle numéro un pour optimiser les temps de réponse du serveur : minimiser le nombre de requêtes.
(écrit le 31/08/2008 - 5.023 lectures)

Améliorer la vitesse d'un site coté serveur
Après avoir optimisé le code des pages coté client, il reste à voir ce que l'on peut faire coté serveur, Yslow nous aide en ce sens
(écrit le 30/08/2008 - 4.447 lectures)

GoogleEarth kml et flux rss
Les flux rss permettant de lire de diffuser le contenu d'une page web sur un site, peuvent être utilisés pour lire un fichier Google Earth dont le contenu évolue.
(écrit le 20/06/2008 - 4.590 lectures)

Annuaire thématique cartographié
Carte des sites web de l'annuaire thématique avec géolocalisation et plan des villes.
(écrit le 05/12/2007 - 11.538 lectures)

Adapter son site à la résolution d'écran
Comment rendre son site lisible en 800 x 600 comme dans les grandes résolutions avec utilisation des balises div
(écrit le 23/11/2007 - 16.241 lectures)

L'API Google Maps Xml et Ajax sont sur un site web
Utiliser un flux xml pour afficher des données sur une carte Googlemaps
(écrit le 19/11/2007 - 12.926 lectures)

Intégrer l'API Google Maps
Présentation des éléments permettant de réaliser une intégration de l'API GoogleMaps sur un site web.
(écrit le 18/01/2006 - 84.004 lectures)

Software 2.0 - Programmation en Java
Le sujet principal de Software 2.0 4/2005 (6) : Programmation en Java
(écrit le 04/04/2005 - 8.292 lectures)



Tutoriels Webmaster

Référencement :

Comment analyser les pages de la search console qui sont répertoriées par Google comme explorées mais non indexées. Faut il les demander leur indexation ou n'y aurait-i pas quelque chose de mieux à faire.


Référencement :

Comment Google Analytics et la Search console Google fonctionnent. Quelle est la différence entre ces outils ? Est ce qu'ils interagissent entre eux ?


Scripts :

Internet a deux caractéristiques principales : Cela bouge beaucoup et cela bouge vite. Le webmaster se doit d'être actif, voire réactif, et de disposer de l'information rapidement. Un simple script en python peut l'aider.


Scripts :

Comment contrôler visuellement que l'affichage de différentes pages web se fait correctement avec les différentes configurations de navigateur, et résolution d'affichage. Le Webdriver de Sélénium permet via un script d'automatiser la capture de telles pages, pour contrôler en un coup d'oeil le résultat.


Conception :

Optimiser un site web avec du responsive design est un pas de plus fait vers l'utilisateur final
Pour autant, si une page du site a un poids de plusieurs méga, l'utilisateur risque, s'il est sur un téléphone mobile, de partir avant que la page ne soit complétement chargée.


Outils :

Comment gérer les erreurs 404 not found sur le fichier browserconfig.xml, alors que celui ci est demandé par le navigateur.


Scripts :

Les feuilles de style d'un site web permettent d'adapter l'affichage à la taille de l'écran. Voyons comment faire pour un site qui s'affiche aussi bien sur un ordinateur, une tablette qu'un téléphone intelligent (smartphone).


Scripts :

L'attribut Placeholder, permettant en HTML5 de renseigner le label d'un champs input, ne fonctionne pas sous Internet Explorer. Voici un script JavaScript simple et efficace à insérer pour contourner ce manque de fonctionnalité.


Pages webmaster
Actu Webmaster

Thèmes Phortail