Toon posts:

[PHP] Grootte van image tussen tags

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een parser van UBB-tags geschreven voor een site waar ik aan bezig ben, en daar kun je dmv de [ img] (zonder de space ;)) tags images invoeren (HTML is disabled).

Maar het nieuwsbericht wordt in een tabel gezet, waarbij de breedte eigenlijk overal gelijk moet blijven. Maar als je nou een plaatje dat groter is (x-as) dan de tabel-breedte, wordt de opmaak nogal verneukt :(.

Hoe zou ik elke image kunnen checken die via een textarea wordt ingegeven dmv die [ img] tags, kunnen checken of de breedte (x-as) groter is dan een bepaalde waarde, en als dit zo is, een width="[waarde]" tag meegeven ?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Ja dat begrijp ik, dat weet ik ook wel ;)

Maar hoe kun je PER [ img] tag de breddte opvragen van de image tussen die tags? Dus er kunnen meerdere tags in een bericht staan...

offtopic:
BTW. Snelle reply :D

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 08 oktober 2002 @ 16:47:
Ja dat begrijp ik, dat weet ik ook wel ;)
Wat is het probleem dan?

Programmer - an organism that turns coffee into software.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:44

gorgi_19

Kruimeltjes zijn weer op :9

edit:

Hier stond onzin

edit:

En ik snap het nog niet helemaal..... Kan je even een paar voorbeelden geven?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

kan dacht je met reguliere expressie en dan met preg_replace... hoe het precies moet uitzien weet ik niet... Nooit echt heel erg in verdiept

Verwijderd

Topicstarter
Hmm, een voorbeeld:

Ik voer een paar images tags in in een <textarea>-field, die vervolgens geparsed wordt:
code:
1
2
3
[img]http://foo.bar/pic1.jpg[/img]
blaat
[img]http://foo.bar/pic2.jpg[/img]


Nu wil ik van elke pic tussen de tags (dus pic1.jpg en pic2.jpg) de breedte weten. Als die breedte groter is dan een bepaalde waarde (dus de breedte van de tabel), moet er aan de gereturnde waarde een width-tag worden meegegeven (dus dan wordt het plaatje verkleint). Als het niet groter is dan die bepaalde waarde, wordt gewoon [img]'[pic'][/img] meegegeven.

Ik weet dat het met regular expressions moet, maar hoe zorg je dan dat niet alle tags een width-tag meekrijgen ? Als je bv dit doet:
PHP:
1
2
3
$tag = "/\\[img\](*.?)\\[/\img\]/";
$replace = "[img]\"\\1\"[/img]";
$text = preg_replace($tag, $replace, $text);


Zo worden alle plaatjes gecropped tot width = 100, terwijl dat niet nodig is bij plaatjes waarvan de breedte kleiner is dan 100. :)

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Als je de locatie van het plaatje hebt verkregen kan je het plaatje toch door GetImageSize heen halen?

Verwijderd

Topicstarter
Ja dat begrijp ik, tot daar toe lukt t nog wel :)

Maar dan het replacen: bij het ene plaatje moet wel een width-tag, bij een ander plaatje juist weer niet :) Hoe fix ik dat ?

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Check de e modifier voor preg_replace..

[ Voor 0% gewijzigd door WouZz op 08-10-2002 18:04 . Reden: linkje ]

On track


Verwijderd

Topicstarter
Hmm, ik snap dat die replace dan als PHP wordt uitgevoerd, maar zou je een voorbeeldje kunnen geven ?

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Example 2. Using /e modifier
PHP:
1
2
3
preg_replace ("/(<\/?)(\w+)([^>]*>)/e", 
              "'\\1'.strtoupper('\\2').'\\3'", 
              $html_body);

:*)

On track


Verwijderd

Topicstarter
Die had ik ook wel gezien ja :P

Ik zou dus dit kunnen doen:
PHP:
1
2
3
preg_replace ("/(<\/?)(\w+)([^>]*>)/e",  
              "'\\1'.checkImageSize('\\2').'\\3'",  
              $html_body);


En dan in checkImageSize:
PHP:
1
2
3
4
function checkImageSize($source) {
// code om te checken of ie te groot is
return $value
}

Waarbij $value leeg is (als plaatje een goede grootte heeft) of width="100" (als het plaatje een breedte heeft van meer dan 100) ?

Maar hoe zou mijn reg_exp er dan uitzien ?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

:? dat kan niet zo moeilijk zijn. Je hebt de functie al bekant

code:
1
2
3
4
5
6
7
8
9
10
function mkImg ( $uri ) {
   list ( $w, $h ) = GetImageSize ( $uri );
   if ( $w > 100 ) {
      $h *= (100/$w)
      $w = 100;
   }
   return // image code;
}
$regex='~\\[img\]([^[]*)\\[/img\]~ie';
$str = preg_replace ( $regex, "mkImg ( '$1' )", $str );


verfijning aan u ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Woei! Bedankt! Nu ff testen ;)

Verwijderd

Topicstarter
Hmm, heel raar: ik zie het niet: als ik em in een losse file test ('test1.php') werkt het prima:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$str = "[img]http://www.gamers.nl/images/content/Erwie/200210/1034007271_0.jpg[/img]";
echo $str."<br>";
function mkImg ( $uri ) {
   list ( $w, $h ) = GetImageSize ( $uri );
   if ( $w > 100 ) {
      $h *= (100/$w);
      $w = 100;
   }
        return "[img]\"$uri\"[/img]";
}
$regex='~\\[img\]([^[]*)\\[/img\]~ie';
$str = preg_replace ( $regex, "mkImg ( '$1' )", $str );
echo $str;


Als ik het echter in een class doe ('parseClass'), werkt het niet en displayed ie alleen de $uri:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function parseImage() {
    $regex='~\\[img\]([^[]*)\\[/img\]~ie';
    $this->data = preg_replace ($regex, "$this->checkImage('$1')", $this->data);
}
    
function checkImage($uri) {
    list ($w, $h) = GetImageSize ($uri);
    if ($w > 350) {
        $h *= (350/$w);
        $w = 350;
    }
    return "[img]\"$uri\"[/img]";
}

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

een dubbele- enkele quote verhaal

de $this wordt ge-evalueerd voordat de regex uit gevoerd wordt ( 2e argument preg_replace )
Gebruik dus of een backslash voor de $ van $this, of gebruik enkele quotes

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Oh damn! Natuurlijk! :D
Pagina: 1