Page 1 sur 1

Regex et fonction de callback

Posté : 27 août 2006, 13:43
par jojolapine
Bon je reviens avec des problèmes de regex...
Je suis en train de me faire une fonction de redimensionnement d'image en php, j'ai déja fait la fonction qui redimensionne, la voilà:
function redim($photo,$largeur,$hauteur)
  {

    
    $width = $largeur;
    $height = $hauteur;
    
    header('Content-type: image/jpeg');
    
    list($width_orig, $height_orig) = getimagesize($photo);
    
    if ($width && ($width_orig < $height_orig)) {
       $width = ($height / $height_orig) * $width_orig;
    } else {
       $height = ($width / $width_orig) * $height_orig;
    }
    
    $image_p = imagecreatetruecolor($width, $height);
    $image = imagecreatefromjpeg($photo);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
    
    imagejpeg($image_p, null, 100);
  }
Ce qui me pose problème, c'est la fonction de "parsage" (comment ça ? c'est pas du français?):
je voudrait que les images ayant pour classe quelquechose de similaire à ceci:
class="redim_400_200"
soient remplacer par l'image redimensionnée, voici le début de ma fonction:
function parser_photo($texte){
    $texte = preg_replace_callback('#<img.*class="redim_([0-9]*)_([0-9]*)".*/>#U','redim',$texte);
  }
seulement je vois bien que cette fonction de fait pas l'affaire...
Parce qu'il faudrait remplacer la partie src de la balise, bref je sais aps trop comment m'y prendre... :-(
merci d'avance

Posté : 28 août 2006, 10:50
par Ryle
En fait, ce qu'il te faudrait puisque tu ne stockes pas les vignettes, c'est mettre ton script de redimension dans une page php dédiée. La fonction appellé par le callback retournerais alors le code html de la balise image en remplaçant la source par un appel à cette page php avec les paramètres qui vont bien :
$texte = preg_replace_callback('#<img.*src="(.*)".*class="redim_([0-9]*)_([0-9]*)".*/>#U','redim',$texte); 

function redim($matches) {
  return '<img src="page_vignette.php?src='.$matches[1].'&width='.$matches[2].'&height='.$matches[3].'" ... >';
}
et dans page_vignette.php, tu récupèrerais $_GET['src'], $_GET['width'] et $_GET['height'] et utiliserais ton code pour générer ton image redimensionnée et retournerais le flux de l'image. Ainsi le navigateur appelera la page avec les paramètres comme si c'était une image, et affichera le flux retourné :)