Avatar billede enhaj Nybegynder
11. december 2003 - 18:28 Der er 20 kommentarer og
1 løsning

At finde et billed i streng, tjekke størrelse og evt. skalere..

<?
function convert_txt($t)
{
$t = str_replace("[B]","<b>",$t);
$t = str_replace("[/B]","</b>",$t);
osv osv osv (en masse andre)
}
$denne = "Test, [img=euroloser.dk/test.jpg]";
convert_txt($denne);

Spgs er så om det muligt i convert_txt at tjekke hvor bredt [img=euroloser.dk/test.jpg] er (evt til en $img værdi, der så tjekker om img >= 500 og skalere ned)
Avatar billede Slettet bruger
11. december 2003 - 18:33 #1
Ikke uden at hente billedet.
Avatar billede enhaj Nybegynder
11. december 2003 - 18:46 #2
hm k.. hva så hvis vi nu siger det ligger på min egen server..
Problemet er jo at det ikke er sikkert at alle billeder er samme størrelse..
Billeder på 100px skal ikke skaleres hvor imod billeder på 500+px skal.
Avatar billede Slettet bruger
11. december 2003 - 18:52 #3
PHP har en smart funktion, som (måske) kan gøre det...

http://dk.php.net/getimagesize
Avatar billede enhaj Nybegynder
11. december 2003 - 18:58 #4
jow.. men hvordan trækker jeg [img=NOGET] ud så jeg kan køre den igennem getimagesize ??

Prøvet frem og tilbage med diverse _replace men må skrive noget forkert ;)
Avatar billede Slettet bruger
11. december 2003 - 19:50 #5
Her er noget kode, der burde lave alle [img=adresse] klumper i $t om til et normalt link, hvis de er for store, og et billedlink, hvis de er passende størrelse. Jeg gad ikke lige lave kode, der skalerer korrekt. Koden er utestet.

$maxbredde=500;
$maxhoejde=500;

while (preg_match("/\[img=([^\]]+\]/i",$t,$billedmatch)){
  $size=getimagesize($billedmatch[1]);

  // På dette sted er $size[0] billedets bredde
  // $size[1] er billedets højde
  // $size[3] er en streng med bredde og højde
  // lige til at sætte i en <img>-tag

  if ($size[0] > $maxbredde || $size[1] > $maxhoejde){
    $billedlink="<a href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
  } else {
    $billedlink="<img src='{$billedmatch[1]}' {$size[3]}>";
  }

  str_replace($billedmatch[0],$billedlink,$t);

}
Avatar billede enhaj Nybegynder
11. december 2003 - 21:18 #6
humhum... Ser nais ud, for godt nok "Warning: Compilation failed: missing ) at offset 15 " men kigger lige på det.. ;)
Avatar billede enhaj Nybegynder
11. december 2003 - 21:29 #7
hov.. er fixet.. har dog ikke fået det til at vise noget endnu..

*rode*rode*
Avatar billede Slettet bruger
11. december 2003 - 22:48 #8
while (preg_match("/\[img=([^\]]+\]/i",$t,$billedmatch)){

skal rettes til

while (preg_match("/\[img=([^\]]+)\]/i",$t,$billedmatch)){
Avatar billede enhaj Nybegynder
11. december 2003 - 22:51 #9
ja.. den fandt jeg..

Eneste der sker her (med $t = "[img=gfx/logo.gif]";) er at den bare looper uden at skrive noget :(
Avatar billede Slettet bruger
11. december 2003 - 23:18 #10
Måske denne er bedre... Der er lidt fejlhåndtering indbygget nu.

$maxbredde=500;
$maxhoejde=500;

while (preg_match("/\[img=([^\]]+)\]/i",$t,$billedmatch)==1){
  if ($size=getimagesize($billedmatch[1])){

    // På dette sted er $size[0] billedets bredde
    // $size[1] er billedets højde
    // $size[3] er en streng med bredde og højde
    // lige til at sætte i en <img>-tag

    if ($size[0] > $maxbredde || $size[1] > $maxhoejde){
      $billedlink="<a href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
    } else {
      $billedlink="<img src='{$billedmatch[1]}' {$size[3]}>";
    }

    str_replace($billedmatch[0],$billedlink,$t);
  } else {
    $billedlink="<a href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
  }
}
Avatar billede enhaj Nybegynder
12. december 2003 - 00:16 #11
hm. er det mit system der ikke fatter noget eller.. Lige meget hvilken a dem jeg prøver, loop'r den bare...

<?
$t= "bla bla bla [img=gfx/logo.gif]";
$maxbredde=500;
$maxhoejde=500;

while (preg_match("/\[img=([^\]]+)\]/i",$t,$billedmatch)==1){
  if ($size=getimagesize($billedmatch[1])){

    // På dette sted er $size[0] billedets bredde
    // $size[1] er billedets højde
    // $size[3] er en streng med bredde og højde
    // lige til at sætte i en <img>-tag

    if ($size[0] > $maxbredde || $size[1] > $maxhoejde){
      $billedlink="<a href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
    } else {
      $billedlink="<img src='{$billedmatch[1]}' {$size[3]}>";
    }

    str_replace($billedmatch[0],$billedlink,$t);
  } else {
    $billedlink="<a href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
  }
}
?>

har jeg glemt noget ?
Avatar billede Slettet bruger
12. december 2003 - 11:08 #12
Erstat-funktionen skal jo være uden for if-blokken. Min fejl. Og str_replace sender den rettede tilbage, så den skal lige fanges. Ellers kører den i loop.

<?
$t= "bla bla bla [img=gfx/logo.gif]";
$maxbredde=500;
$maxhoejde=500;

while (preg_match("/\[img=([^\]]+)\]/i",$t,$billedmatch)==1){
  if ($size=getimagesize($billedmatch[1])){

    // På dette sted er $size[0] billedets bredde
    // $size[1] er billedets højde
    // $size[3] er en streng med bredde og højde
    // lige til at sætte i en <img>-tag

    if ($size[0] > $maxbredde || $size[1] > $maxhoejde){
      $billedlink="<a href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
    } else {
      $billedlink="<img src='{$billedmatch[1]}' {$size[3]}>";
    }

  } else {
    $billedlink="<a href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
  }
  $t=str_replace($billedmatch[0],$billedlink,$t);
}
?>

Eller kan du prøve at indsætte linier som

echo "Fuld match={$billedmatch[0]}\n";
echo "URL={$billedmatch[1]}\n";
echo "Højde={$size[0]}\n";
echo "Bredde={$size[1]}\n";

For at indsnævre hvor den ikke gør som vi forventer.
Avatar billede enhaj Nybegynder
12. december 2003 - 16:19 #13
Så for sivan NU sker der noget....
Mange tak skal du have..

$maxbredde=500;
$maxhoejde=500;
$t = str_replace("img=","img=http://",$t);
$t = str_replace("img=http://http://","img=http://",$t);
while (preg_match("/\[img=([^\]]+)\]/i",$t,$billedmatch)==1){
  if ($size=getimagesize($billedmatch[1])){
    // På dette sted er $size[0] billedets bredde
    // $size[1] er billedets højde
    // $size[3] er en streng med bredde og højde
    // lige til at sætte i en <img>-tag
    if ($size[0] > $maxbredde){
      $billedlink="<img width='500' src='{$billedmatch[1]}'><br><a target='x' href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
    } else {
      $billedlink="<img src='{$billedmatch[1]}' {$size[3]}>";
    }
    if($billedlink!=NULL){    $billedlink = "<center>$billedlink</center>";    }
  } else {
    $billedlink="<a href='{$billedmatch[1]}'>{$billedmatch[1]}</a>";
  }
  $t=str_replace($billedmatch[0],$billedlink,$t);
}
Avatar billede Slettet bruger
12. december 2003 - 19:21 #14
Så skal der vel et svar til?
Avatar billede enhaj Nybegynder
12. december 2003 - 20:53 #15
jeps ;)
Avatar billede Slettet bruger
12. december 2003 - 21:08 #16
Takker.

Det er utroligt så meget man kan lære ved at svare på spørgsmål. Især, når man forsøger at svare på spørgsmål, som berører ting, man ellers ikke havde tænkt på at gøre selv. ;-)
Avatar billede enhaj Nybegynder
13. december 2003 - 16:12 #17
heh ja.. Så bør du vel give mig 60 points oxo ;)
Avatar billede Slettet bruger
13. december 2003 - 16:19 #18
:-D
Avatar billede enhaj Nybegynder
13. december 2003 - 16:48 #19
Takker lige igen..
Mit fora var aller blevet det samme uden den snip kode ;)
Avatar billede Slettet bruger
13. december 2003 - 17:04 #20
Nu skal du passe på, at du ikke takker over... ;-)
Avatar billede enhaj Nybegynder
13. december 2003 - 20:38 #21
nej jeg vil ikke.. Nu har jeg betalt 60p for det, så vil jeg oxo have lov :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester