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 :

Redimensionner physiquement une image selon ses dimensions


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Redimensionner physiquement une image selon ses dimensions
    Bonjour à tous,

    Bon c'est un redimensionnement bien particulier que je tente de faire.

    Les images sont présentes de cette manière sur la page html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="http://www.nom_du_site/image.jpg" width="200px" height="100px">
    Bien évidemment les images sont juste redimensionnées à l'affichage et non physiquement. Ce que je souhaite faire c'est de redimensionner physiquement aux dimensions présent dans la balise <img> c'est à dire 200 par 100 pixels dans mon exemple.
    Donc en faite ce que j'essaye de faire c'est un script qui trouverais toutes les images afficher dans la page et ferais un redimensionnement physique de chacune d'entre elles selon leurs attribut de largeur hauteur.

    Pour ceux qui ce demande la raison pour laquelle je souhaite faire cella. J'ai developpé un système de création de newsletter pour un client, ou grâce à un editeur web il saisie le contenu souhaité dans la newsletter puis selectionne un modèle graphique. Mais malheureusement lors de l'exportation de cette page html dans Outlook 2007 (qui présente de gros défaut d'affichage de l'html,vive word) les attributs des images sont supprimé. Donc
    en modifiant physiquement les images en fonction de leurs taille à l'affichage je réglerais ce soucis de dimension.

    Voilà Si vous avez une piste... une idée ou des questions je suis preneur !

    Je vous remercie grandement d'avance de votre aide.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Salut à toi,

    Tout d'abord , dans un premier temps, il faut récupérer toutes les balises img de ton document, pour se faire j'ai adapté le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    $str = <<< END
    <img src="image1.jpg" title ="" width="200" height="100" />
    <img src="image2.jpg" title ="" width="300" height="50" />
    <img src="image3.jpg" title ="" width="200" />
    END;
     
    $tag = 'img';
    $att = 'width|height|src';
     
    if (preg_match_all('/<'.$tag.'[^>]*>/', $str, $m)) {
        $result = array();
        foreach($m[0] as $balise) {
            $buffer = array();
            $reg = sprintf('/(%s) \s* = \s* (["\']?) ([^">\s]*) \2/ix', $att);
            if (preg_match_all($reg, $balise, $n)) {
                foreach($n[0] as $key=>$value) {
    				$buffer[ $n[1][$key] ] = $n[3][$key];
                }
            }
            $result[$tag][] = $buffer;
        }
    }
    //affichage du résultat
    if(!empty($result))
    {
    	foreach($result[$tag] as $balise)
    	{
    		echo 'chemin : '.$balise['src'];
    		echo '<br />';
    		echo 'Largeur : '.$balise['width'];
    		echo '<br />';
    		echo 'hauteur : '.$balise['height'];
    		echo '<br />';
    		echo '<br />';
    	}
    }
    ?>
    Comme tu peux le voir il repère toutes les balises img et enregistre les attributs désirés (width et height et l'occurence).

    Une fois que tu as ceci, il te faut utiliser un script de redimensionnement d'image comme on en trouve partout et notamment sur developpez :

    http://mtodorovic.developpez.com/php...e_3#LIII-3.2.3

    Tu peux te baser sur ce tutoriel qui traite de la manipulation d'images et redimensionner selon tes besoins.

    Voilà

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Magnifique ! exactement ce qu'il me manquais
    Dans la lancée est-ce qu'il serait possible, à partir des attributs margin-top, margin-left etc.. créer des marges transparente autour de l'image ? :p

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Attention par contre à ne pas redimensionner directement les sources spécifiées dans les balises IMG, car, si tu changes les dimensions de ces images pour des dimensions plus grandes, le rendu sera dégueu.

    Le mieux est d'avoir un script qui génère dynamiquement l'image, soit en créant une copie redimensionnée de l'image source, soit en générant l'image à la volée.

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Bonjour,

    Attention par contre à ne pas redimensionner directement les sources spécifiées dans les balises IMG, car, si tu changes les dimensions de ces images pour des dimensions plus grandes, le rendu sera dégueu.

    Le mieux est d'avoir un script qui génère dynamiquement l'image, soit en créant une copie redimensionnée de l'image source, soit en générant l'image à la volée.
    Je pars du faite que le client ai quand même un certain bon sens en ce qui concerne la choix de la dimension de ses images dans sa newsletter. En vus que c'est lui qui les uploads à partir e l'éditeur web. Mais de toute manière je ne toucherais pas à l'original, une copie sera créeret c'est celle-ci que j'afficherais

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Bon je me retrouve de nouveau avec un soucis. Je me suis rendu compte que la taille des images et défini de deux manières à partir de l'éditeur web. Une quand on défini la taille de l'image à partir de la configuration des images et l'autre et en changeant la taille directement dans l'éditeur avec la souris. la deuxième manière ajoute un style="width:300px; height:250px;" dans la balise img.
    J'ai bien vus que l'endroit ou nous pouvons récupérer les valeurs ce passe ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reg = sprintf('/(%s) \s* = \s* (["\']?) ([^">\s]*) \2/ix', $att);
    Malheureusement mes compétences dans les expressions régulières n'est pas assez bonne pour faire les bonnes modifications.
    Il faudrait prendre en compte que ça peut être width="200" comme width:"200" ou encore width="200px" ou width:"200px"

    Hop je réédite mon post car j'ai trouvé comment prendre en compte le = :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reg = sprintf('/(%s) \s* [=:] \s* (["\']?) ([^">\s]*) \2/ix', $att);
    Mais il reste toujours les px présent parfois dans les attributs et si je filtre les valeurs avec un 0-9 comme ceci ([0-9^">\s]*) mais par logique il me retire aussi la source de l'image...


    quelqu'un arriverait à me filer un coup de main ? :p

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    un petit up ! Il me reste plus que ça et le cauchemar Outlook sera fini !

  8. #8
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    et comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $reg = sprintf('/(\w)\s?[=:]\s?(["\']?)(\d)(px?)(["\';])/ix', $att);
    Un mot
    suivi d'un espace ou non (important le ou non..)
    suivi de deux points ou d'un égal
    suivi d'un espace ou non
    suivi d'une guillemet ou d'un apostrophe
    suivi d'un nombre
    suivi de px ou non
    puis termine par une guillemet, un apostrophe ou un point virgule

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Bon et bien j'ai trouvé la solution... et d'ailleurs je suis un peu con de pas y avoir penser avant... En vus qu'ensuite les informations sont affiché avec un foreach et bien je traite juste avant l'affichage la ligne qui ne dois pas contenir de caractère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ereg_replace("[^0-9]","",$balise['width']);
    Tout bêtement et ainsi je ne conserve que les valeur numérique des dimensions des images !

    Encore merci à vous deux pour votre aide

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

Discussions similaires

  1. Redimensionner une image selon taille de la fenêtre
    Par CLeBeR dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 12/12/2014, 14h31
  2. Binariser une image selon ses canaux RGB
    Par zorino-liger dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 06/04/2012, 16h29
  3. redimensionner une image selon la taille de jlabel
    Par titeufdev dans le forum Composants
    Réponses: 2
    Dernier message: 06/04/2011, 10h21
  4. [GD] agrandir une photo selon ses dimensions
    Par lrool2014 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/12/2008, 12h26
  5. [HTML][CSS] Redimensionner une image selon condition
    Par Eilkh dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/02/2006, 15h55

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