IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Extraction du style d'une image [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut Extraction du style d'une image
    Bonjour,

    J'éssai de remplacer la balise style d'une image par rien mais je n'y parvient pas.

    Voici mon code:
    Le preg_match fonctionne, c'est lui qui m'extrait la balise img d'un plus grand texte mais le eregi_replace ne veut pas me supprimer le style.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    preg_match_all('/<img[^>]+>/i', $texte, $result);
    $img = eregi_replace("style=([^\"]+) ", "", $result[0][0]);
    print_r($img);
    J'avais trouvé le ergi_replace sur un site et d'aprés l'auteur cela fonctionnais.

    Si une ame charitable voulais bien me venir en aide.

  2. #2
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    Bonjour,

    Il y a moyen de faire ça avec un seul regex avec preg_replace() (je ne sais pas si ça t'arrange ?):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /<img.*?\K( style="[^"]+")(?=[^>]*>)/
    DEMO (ici j'airemplacé par "++" juste pour montrer le lieu des changements)

    En gros, ce regex cherche l'attribut "style" et sa valeur à l'interieur d'un tag "img"... Plus en détails (Désolé pour la lisibilité mais la balise "quote" détruit le formattage :/ ):

    NOEUD ===> EXPLICATION
    --------------------------------------------------------------------------------
    <img ===> '<img'
    --------------------------------------------------------------------------------
    .*? ===> Tout caractère sauf \n (0 fois ou plus (Récupère le minimum possible "Ungreedy"))
    --------------------------------------------------------------------------------
    \K ===> Il fait un reset sur tous ci qui a été matché jusqu'ici. Autrement dit: Tous ce qui a été matché jusqu'ici ne sera pas inclus dans le résultat final.
    --------------------------------------------------------------------------------
    ( ===> Grouper et stocker dans \1:
    --------------------------------------------------------------------------------
    style=" ===> ' style="'
    --------------------------------------------------------------------------------
    [^"]+ ===> Tout caractère sauf " (1 fois ou plus (Récupère le maximum possible "Greedy = Gourmand"))
    --------------------------------------------------------------------------------
    " ===> '"'
    --------------------------------------------------------------------------------
    ) ===> Fin de \1
    --------------------------------------------------------------------------------
    (?= ===> look ahead positif qui verifie que ce qui suit contient:
    --------------------------------------------------------------------------------
    [^>]* ===> Tout caractère sauf > (0 fois ou plus (Récupère le maximum possible "Greedy = Gourmand"))
    --------------------------------------------------------------------------------
    > ===> '>'
    --------------------------------------------------------------------------------
    ) ===> Fin du look-ahead
    Le dernier look ahead n'est pas indispensable et peut être enlevé...

    À toi de tester et me dire ce qu'il en était

    Voici un dernier bout de code pour t'aider:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    	$input = '<div class="avatar avatar-32 clear-both" style="display: none;"><img width="32" height="32" src="http://i.stack.imgur.com/xBOdsdp.jpg?s=128&amp;g=5&amp;g&amp;s=3" alt="Johny" title="Johny" style="border: 0;"><div></div></div>
    <div class="avatar avatar-32 clear-both" style="display: none;"><img width="32" height="32" src="http://i.stack.imgur.com/xBOdsdp.jpg?s=128&amp;g=5&amp;g&amp;s=3" style="border: 0;" alt="Johny" title="Johny"><div></div></div>
    <div class="avatar avatar-32 clear-both" style="display: none;"><img width="32" height="32" src="http://i.stack.imgur.com/xBOdsdp.jpg?s=128&amp;g=5&amp;g&amp;s=3" alt="Johny" title="Johny"><div></div></div>';
     
    	$pattern = '/<img.*?\K( style="[^"]+")(?=[^>]*>)/';
     
    	$replacement= '###';
     
    	$output = preg_replace($pattern, $replacement, $input);
     
    	echo htmlentities($output);
    ?>
    Une réponse utile vous a aidé ? N'oubliez pas le
    Votre problème est résolu ? N'oubliez pas le

  3. #3
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut
    Bonjour,

    Merci pour cette réponse vraiment compléte.

    j'ai un peu modifié ta solution car effectivement ça ne m'arrangais pas car il me fallait la balise image seule puis enlever le style à l'intérieur de celle-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    preg_match_all('/<img[^>]+>/i', $html, $result); 
    $pattern = '/<img.*?\K( style="[^"]+")(?=[^>]*>)/';
    $replacement= '';
    $output = preg_replace($pattern, $replacement, $result[0][0]);
    print_r($output);
    $result[0][0] me sert a n'afficher que la permiére image dans le cas ou il y en a plusieurs dans le code.
    Sinon j'avais trouvé une autre solution entre temps même si je pense que je vais utiliser la tienne qui me parait plus propre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    preg_match_all('/<img[^>]+>/i', $html, $result); 
    $pattern = '/(<img.*?style[\s]*=[\s]*[\'\"]).*?([\'\"].*?[\/]?>)/';
    $output = preg_replace($pattern, '${1} max-width: 60px; max-height: 50px; ${2}', $result[0][0]);
    print_r($output);

  4. #4
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    Ah, ce que j'avais oublié de dire c'est que ce regex marchera dans le cas où le $input est 'tout le fichier HTML', et marchera également s'il ne s'agit que des balises "img" (ce que tu as utilisé)...

    Mais, dans ce dernier cas, il y a moyen encore de simplifier le regex, et tu pourras n'utiliser que: qui match l'attribut style avec son contenu, précédé par un éspace ou plus....

    DEMO

    Ravi d'avoir aidé
    Une réponse utile vous a aidé ? N'oubliez pas le
    Votre problème est résolu ? N'oubliez pas le

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraction d'objet d'une image
    Par lastrecrue dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 12/06/2009, 20h47
  2. Modifier le style d'une image
    Par Spiv30 dans le forum jQuery
    Réponses: 2
    Dernier message: 16/02/2009, 10h46
  3. Extraction de zone d'une image
    Par li_causi dans le forum C++
    Réponses: 0
    Dernier message: 25/03/2008, 14h16
  4. Découpage et extraction des données d'une image
    Par Gouyon dans le forum Visual C++
    Réponses: 10
    Dernier message: 15/11/2007, 14h41
  5. vc++(6)+extraction des données dans une image(.tif)
    Par spootnic22 dans le forum Visual C++
    Réponses: 1
    Dernier message: 22/11/2006, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo