JeuWeb - Crée ton jeu par navigateur
Image et BBcode - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Image et BBcode (/showthread.php?tid=5096)



Image et BBcode - titnome - 19-08-2010

Bonjour,

Voila je développe un projet comme j'ai pu le décrire dans la section prévu à cet effet et je rencontre quelques difficultés pour récupérer le chemin d'une image incluse dans un BBcode. Ce n'est pas réellement le BBcode qui m'ennuie ni le redimensionnement. Mais juste la récupération du chemin.

Voici le code de traitement du BBcode :
<?php
function bbcode($message) {
if ( !empty($message) ) {
$message = nl2br(htmlentities($message, ENT_NOQUOTES, 'UTF-8'));

$message = stripslashes($message);

$conv = array(
'#\[g\](.*)\[/g\]#Usi' => '<b>$1</b>',
'#\[i\](.*)\[/i\]#Usi' => '<i>$1</i>',
'#\[s\](.*)\[/s\]#Usi' => '<u>$1</u>',
'#\\[align=centre\](.*)\[\/align\]#Usi' => '<div style="text-align : center">$1</div>',
'#\\[align=droite\](.*)\[\/align\]#Usi' => '<div style="text-align : right">$1</div>',
'#\\[align=justifie\](.*)\[\/align\]#Usi' => '<div style="text-align : justify">$1</div>',
'#\\[url=(.*)\](.*)\[\/url\]#Usi' => '<a href="$1" target="_blank">$2</a>',
'#\\[image=(.*)\]#Usi' => redim_image('$1')
);

foreach ($conv as $key => $value) {
$message = preg_replace($key, $value, $message);
}
}
else {
$message = "<div class=\"message_erreur\">Une erreur est survenue pendant le traitement du code BBcode.</div>";
}
return $message;
}
?>
La fonction de redimensionnement de l'image fonctionne. Je l'ai testée. Mais quand je cherche à récupérer les dimensions de celle ci voici le message qu'il m'affiche :
Code :
Warning: getimagesize($1) [function.getimagesize]: failed to open stream: No such file or directory in D:\User\Documents\mes sites\wamp\www\Systeme\Fonctions\image_redim.php on line 7

Je vous inclus alors le code de la fonction en question :
<?php
function redim_image($chemin) {
// vous pouvez travailler en url relative aussi: img.jpg
$x = 500; # largeur a redimensionner
$y = 375; # hauteur a redimensionner

$size = getimagesize($chemin);

if ($size[0] > $x) {
$difference_x = $size[0]-$x;
}

if ($size[1] > $y) {
$difference_y = $size[1]-$y;
}

if (!empty($difference_x)&&!empty($difference_y)) {
if ($difference_x>$difference_y) {
$pourcentage = round((100*$x)/$size[0]);
}
else {
$pourcentage = round((100*$y)/$size[1]);
}
}
else {
if (!empty($difference_x) && empty($difference_y)) {
$pourcentage = round((100*$x)/$size[0]);
}
else if (empty($difference_x) && !empty($difference_y)) {
$pourcentage = round((100*$y)/$size[1]);
}
else {
$pourcentage = '100';
}
}

if ($pourcentage != 100) {
$multiplicateur = $pourcentage*0.01;
$new_x = $size[0]*$multiplicateur;
$new_y = $size[1]*$multiplicateur;
$style= "style=\"width : ".$new_x."px; height : ".$new_y."px;\"";

$return = "<div style=\"background : #000000; color : #ffffff; display : inline;\"><img src=\"".$chemin."\" ".$style." /><br />Image retouchée : ".$pourcentage."% de la taille originale.</div>";
}
else {
$return = "<img src=\"".$chemin."\" />";
}

return $return;
}
?>
L'image s'affiche bien mais impossible de récupérer les données la concernant. je fais le redimensionnement de cette manière mais j'ai pensé le faire aussi en PHP en générant une image PHP mais bien entendu c'est beaucoup plus long au chargement. Et je voudrais limiter un minimum de solliciter le serveur. auriez vous des idées?


RE: Image et BBcode - julp - 19-08-2010

L'appel suivant est faux :
Code :
redim_image('$1')
Il a lieu à la déclaration du tableau et non pendant le remplacement. Donc au lieu d'appeler la fonction pour chaque image rencontrée, avec le chemin de cette dernière ; il n'a lieu qu'une fois, avant avec pour valeur $1.

Pour effectuer le traitement pendant le remplacement, il faut s'orienter vers le flag e, ou mieux, sur la fonction preg_replace_callback.


RE: Image et BBcode - titnome - 19-08-2010

J'ai essayé de mettre en place avec la fonction preg_match_callback(). Je n'arrive pas à la mettre ne place.
Pourriez vous m'aider un peu?

Ce n'ai pas l'appel que je n'arrive pas. Mais faire fonctionner la fonction...


RE: Image et BBcode - julp - 19-08-2010

Code :
$message = preg_replace_callback(
    '#\[image=(.*)\]#Usi',
    function ($matches) {
        return redim_image($matches[1]);
    },
    $message
);
(la fonction anonyme requiert PHP >= 5.3 sinon il faut adapter)

Avec le flag e :
Code :
'#\[image=(.*)\]#Usie' => 'redim_image("\1")'

Je n'ai rien testé faute de temps.