8795 sujets

Développement web côté serveur, CMS

Hola!

Voilà, je me suis mis a utiliser CKEditor, que je trouve vraiment très bien. Les utilisateurs peuvent insérer des images, CKEditor va donc logiquement insérer une balise image, seulement voila si l'image originale fait 2000px et que l' utilisateur la redimensionne a 100px, cela donnera <img src="monimageoriginalede2000pixel.jpg" style="width:100px;height:80px" /> ce qui pose diffèrent problèmes visuelles et surtout de poids des pages.

Mon idée c'est donc de récupérer les attributs width et height qu'il soit comme attribut ou dans les styles en ligne et redimensionner l'image en fonction.

Pour l'instant j'ai fait cette fonction:


$text = preg_replace_callback('~<img(.*?)\/>~is','resize_image',$text);

function resize_image($matches){

    preg_match_all("#(\w+)=['\"]{1}([^'\"]*)#", $matches[1], $matches2);
    $atts = array_combine($matches2[1],$matches2[2]);
    
    if(!empty($atts['width'])) $width = preg_replace('#[^0-9]#','',$atts['width']);

    if(!empty($atts['height'])) $height = preg_replace('#[^0-9]#','',$atts['height']);
    
    if(!empty($atts['style'])){

        preg_match_all("#([\w-]+):{1}\s?([^;]*)#",$atts['style'], $matches3);
        $styles = array_combine($matches3[1],$matches3[2]);
        $style = ' style="';
        foreach($styles as $name => $val){
            if($name != 'width' && $name != 'height'){
                $style .= $name.':'.$val.';';
            }
        }
        $style .= '"';
        if(!empty($styles['width'])) $width = preg_replace('#[^0-9]#','',$styles['width']);
        if(!empty($styles['height'])) $height = preg_replace('#[^0-9]#','',$styles['height']);

    }else{  
        $style = '';
    }
    
    if($width && $height){
        $image = new Image(strstr($atts['src'], 'files/'));
        $src = $image -> resize($width,$height);
    
        $img = '<img src="'.$src.'" width="'.$image->width.'" height="'.$image->height.'" alt="'.$atts['alt'].'"';
        if(!empty($atts['class'])) $img .= ' class="'.$atts['class'].'"';
        if(!empty($atts['id'])) $img .= ' id="'.$atts['id'].'"';
        $img .= $style.' />';
    }else{
        $img = $matches[0];
    }
    return $img;
}


La classe Image est un classe de redimensionnement d'image.

Je me demandais si il n'existerais pas de méthode plus efficace basé sur des classes de parseur existant en php?
Modifié par matmat (31 May 2010 - 19:05)