Nouveau sujet Répondre Imprimer Syndication RSS 2.0

Mettre du texte sur une image

Brasier
Avatar de DDril
  • Messages : 756
  • Inscrit : 03 Janvier 2005
  Lien vers ce message 25 Février 2006, 21:19

Reprise du dernier message

Finalement j'ai réussi mais pour la taille maintenant ca se limite à la taille du texte (merci à nerevare pour son html)

[php]$texte = preg_replace('`\[img=(www\.|ftp\.)(.*?)\](.*?)\[/img\]`i', '<table><tr><td background="http://\\1\\2">\\3</td></tr></table>', $texte);
[/php]

Comment régler ce pèroblème de taille (réglable via img=addresse larg= haut= ] par exemple)

Merci d'avance.


Webmaster de l'Organisation Très Secrète
 
VIP
Avatar de Shekral
  • Age : 27 ans
  • Messages : 972
  • Inscrit : 25 Février 2006
  Lien vers ce message 25 Février 2006, 21:39
Utilise la fonction getimagesize. Losque tu parse, tu récupère l'url de l'image avec [php]preg_match("`\[img=(.*?)\](.*?)\[\/img\]`si", $message_txt, $match);[/php]
dans la variable $message_txt tu y met le poste non parsé.
Dans $match tu récupère un tableau contenant à l'index 1 l'url de l'image
[php]$url_image = $match[1];[/php]
(pour info à l'indexe 2 tu as le texte sur l'image)
Ensuite pour avoir la taille de l'image tu fais par exemple :[php]list($width, $height) = @getimagesize($url_image);[/php]
et ensuite tu appliques la hauteur et la largeur à la balise <td> de ton table où tu affiche l'image.

Edit : Dans l'exemple d'utilisation de getimagesize les variables $width et $height contienent après la largeur et la hauteur.
Ceci devrait te permettre d'avoir les dimensions de l'image à afficher en revanche il y a un inconveniant, c'est que le message ne pourra comporter qu'une image avec texte, puisque preg_match s'arrete dès qu'une occurence satisfait le masque. Il y a bien preg_match_all qui récupère toutes les occurences mais le problème après et au moment du parse car quand tu va faire preg_replace, tu sais pas quelle occurrence tu traite (je sais pas si je suis clair)


WikiFSB
 
Brasier
Avatar de DDril
  • Messages : 756
  • Inscrit : 03 Janvier 2005
  Lien vers ce message 25 Février 2006, 21:46
Euh là je suis totalement embrouillé je suis pas sûr de comprendre comment l'insérer dans mon function_message.php O_o.
Je comprends pas trop où placer ces codes tu pourrais me préciser un peu mieux?


Webmaster de l'Organisation Très Secrète
 
VIP
Avatar de Shekral
  • Age : 27 ans
  • Messages : 972
  • Inscrit : 25 Février 2006
  Lien vers ce message 25 Février 2006, 21:53
Avant de faire [php]$texte = preg_replace('`\[img=(www\.|ftp\.)(.*?)\](.*?)\[/img\]`i', '<table><tr><td background="http://\\1\\2">\\3</td></tr></table>', $texte);[/php]

tu récupère les données de l'image avec [php]preg_match("`\[img=(.*?)\](.*?)\[\/img\]`si", $message_txt, $match);
$url_image = $match[1];
list($width, $height) = @getimagesize($url_image);
[/php]


WikiFSB
 
Brasier
Avatar de DDril
  • Messages : 756
  • Inscrit : 03 Janvier 2005
  Lien vers ce message 25 Février 2006, 21:57
Je comprends mieux merci.

C'est plutot embêtant (je viens de voir ton édite) justement le but était d'en afficher plusieurs hors, si je comprends bien ta phrase, je ne pourrais en afficher qu'un par message c'est ça?


Webmaster de l'Organisation Très Secrète
 
VIP
Avatar de Shekral
  • Age : 27 ans
  • Messages : 972
  • Inscrit : 25 Février 2006
  Lien vers ce message 25 Février 2006, 22:03
oui, c'est le problème.
J'essaie de réfléchir à ça, j'ai une idée il faut que je revoie comment on utilise preg_replace


WikiFSB
 
Brasier
Avatar de DDril
  • Messages : 756
  • Inscrit : 03 Janvier 2005
  Lien vers ce message 25 Février 2006, 22:05
Prend ton temps ce n'est pas pressent.

Merci de ta patience et ton aide en tout cas.


Webmaster de l'Organisation Très Secrète
 
VIP
Avatar de Shekral
  • Age : 27 ans
  • Messages : 972
  • Inscrit : 25 Février 2006
  Lien vers ce message 25 Février 2006, 22:18
J'ai trouvé.
en fait preg_replace prend un paramètre 'limit'. avec ça tu peux limiter le remplacement à 1 et tu fais une boucle jusqu'à ce qu'il n'y en a plus à faire.
Voilà le code complet avec modification du preg_match en preg_match_all:
[php]
preg_match_all("`\[img=(.*?)\](.*?)\[\/img\]`si", $texte, $match);
$url_image = $match[1]; // $url_image est un tableau conteant ttes les url des images à insérer
$width = array();
$height = array(); // On va stocker les dimmensions dans ces 2 tableaux
for( $i = 0; $i < count($url_image); $i++)
{
list($width[$i], $height[$i]) = @getimagesize($url_image[$i]);
$texte = preg_replace('`\[img=(www\.|ftp\.)(.*?)\](.*?)\[/img\]`i', '<table><tr><td width="' . $width[$i] . '" height="' . $height[$i] . '" background="http://\\1\\2">\\3</td></tr></table>', $texte, 1);
}

[/php]

Edit : j'ai oublié de mettre les dimensions de l'image pour le td.

Edit 2 : j'ai mis les dimensions et j'ai corrigé une truc (j'avais oublié des $ devant tous les i de la ligne du getimagesize


WikiFSB
 
Brasier
Avatar de DDril
  • Messages : 756
  • Inscrit : 03 Janvier 2005
  Lien vers ce message 26 Février 2006, 11:46
Avec ce que tu viens de me donner je devrais noter quoi dans la balise [img=] ?

[img=lien de l'image 400 100] ou quelque chose d'autre?


Webmaster de l'Organisation Très Secrète
 
VIP
Avatar de Shekral
  • Age : 27 ans
  • Messages : 972
  • Inscrit : 25 Février 2006
  Lien vers ce message 26 Février 2006, 12:33
t'as balise image aura cette forme : texte sur l'image
les dimensions de l'image n'ont pas besoin d'être précisées dans la balise, elles sont récupérées dans le code avec le getimagesize.


WikiFSB
 
Brasier
Avatar de DDril
  • Messages : 756
  • Inscrit : 03 Janvier 2005
  Lien vers ce message 27 Février 2006, 9:07
J'ai essayer avec ton code mais ca ne me met toujours qu0'une partie de l'image correspondant au texte.

EDIT : finalement j'ai réussi à régler mon problème.

Merci de vos aides à tous !


Webmaster de l'Organisation Très Secrète
 
VIP
Avatar de Shekral
  • Age : 27 ans
  • Messages : 972
  • Inscrit : 25 Février 2006
  Lien vers ce message 27 Février 2006, 13:00
Poste ton code, ça peut intéresser d'autres personnes.


WikiFSB
 
Répondre


.