Avatar billede kongfjong Nybegynder
29. marts 2006 - 21:30 Der er 27 kommentarer og
1 løsning

Hjælp til billed-tagster

Jeg ha følgende kode, der omdanner et skrevent link til et billede, til et klikbart billede:

$pattern = "(<a href=)((http|https|ftp)://[^ ]+\.(png|jpg|jpeg|gif))( target=_blank><img src=)((http|https|ftp)://[^ ]+\.(png|jpg|jpeg|gif))( width=300 height=175></a>)";
$erstatning = "\\2";   
$streng = eregi_replace($pattern, $erstatning, $streng);

Jeg har dog det problem, at i den tekst der indeholder url'erne til billeder, skal der være mindst ét mellemrum ellers duer det ikke. Har et eksempel:

Hvis jeg f.eks. skriver følgende:
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG

Uden mellemrum men bare med et linjeskift, bliver det omdannet til:
<a href=http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG target=_blank><img src=http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG width=300 height=175></a>

Eller hvis jeg skriver følgende:
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG
Test
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG

Blive det til:
Test
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG target=_blank> Test
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG width=300 height=175>

Nogen der kan se hvad der er galt og hvad der mangler?
Avatar billede jakobdo Ekspert
30. marts 2006 - 10:10 #1
Jeg kan ikke lide din måde at resize billede på.
Du bruger: width=300 height=175, det gør godt nok billedet ser mindre ud, men hele billedet skal stadig loades.
Det smarte kunne være at rent faktisk resize billede via gdlib.
Avatar billede kongfjong Nybegynder
30. marts 2006 - 14:17 #2
Hm okay. Kan du forklare hvordan man kunne gøre det?

Og har du en hjælp til hvordan jeg undgår det oprindelige problem?
Avatar billede jakobdo Ekspert
30. marts 2006 - 15:25 #3
Prøv lige at test denne:

$nytekst = preg_replace('/((http|https|ftp):\/\/[^\\s]+\\.(png|jpg|jpeg|gif))/i', '<a href="$1" target="_blank"><img src="$1" width="300" height="175"></a>', $tekst);
Avatar billede kongfjong Nybegynder
30. marts 2006 - 16:21 #4
Hmmm prøvede din funktion som egentligt virker fint. Problemet er så, at nu kommer der følgende fejl:

http://www.fmground.dk/forum.php?action=showEmne&emne_index=15&emne_id=897 (se nederste indlæg)
Avatar billede jakobdo Ekspert
30. marts 2006 - 16:23 #5
Det var mærkeligt!
Hvor mange billeder er der rigtigt i nederste indlæg?
Avatar billede kongfjong Nybegynder
30. marts 2006 - 17:03 #6
To:)
Avatar billede jakobdo Ekspert
30. marts 2006 - 17:08 #7
Hvad indeholder indlægget inden det smides igennem din formattering?
Avatar billede kongfjong Nybegynder
30. marts 2006 - 21:33 #8
Tja det var et åndsvagt felt i formularen, af hidden-typen, der viste billederne igen. Da jeg ikke bruger det felt, fjernede jeg det bare og det virker:)

Jeg har så også brug for en "omvendt" tagster, der kan vende indholdet tilbage til det brugeren skrev, så man kan rette i sit indlæg:)

Kan du måske forklre følgende del af din regex:
[^\\s]+\\.

Samt "/i" til sidst:) Har nemlig prøvet den af i RegEx Buddy men tror ikke helt den er til at regne med:)
Avatar billede jakobdo Ekspert
30. marts 2006 - 21:49 #9
[^\\s]+\\.

[^\\s] = tegn som ikke er et mellemrum/whitespace.
+ = en eller flere.
\\. = et punktum .
Avatar billede kongfjong Nybegynder
01. april 2006 - 09:45 #10
Ah okay;) og "/i"?

Du nævner desuden noget med at resize billedet via GDLib. Kunne du måske forklare det lidt nærmere?
Avatar billede jakobdo Ekspert
02. april 2006 - 19:17 #11
/i betyder = case insensitive (altså ingen forskel på store og små bogstaver)
Avatar billede jakobdo Ekspert
02. april 2006 - 19:24 #12
Og resize kan du bruge denne funktion til:

function resize( $filename, $newfilename, $maxw, $maxh)
{
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}
Avatar billede kongfjong Nybegynder
03. april 2006 - 13:17 #13
Ah oki nice:) NU har jeg så kun et spg tilbage, og bare rolig du har allerede gjort dig fortjent til pointene;)

Men har brug for den "omvendte" tagster. Altså en der gør det modsatte af den funktion du smed:

$nytekst = preg_replace('/((http|https|ftp):\/\/[^\\s]+\\.(png|jpg|jpeg|gif))/i', '<a href="$1" target="_blank"><img src="$1" width="300" height="175"></a>', $tekst);

Har ikke helt kunne få det til at fungere:)
Avatar billede jakobdo Ekspert
03. april 2006 - 13:26 #14
Hvad mener du helt præcist?
Vil du have konverteret:

<a href=http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG target=_blank><img src=http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG
http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG width=300 height=175></a>
til:

http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG ??
Og du gemmer vel kun http://www.martinhjort.net/fmg/Darwen/ColinGill.PNG i din DB?
Og så konvertere det når det outputtes?
Avatar billede kongfjong Nybegynder
03. april 2006 - 13:42 #15
Det var det jeg ville ja:)

Nej desværre gemmer jeg den formatterede streng selvom jeg godt kan se det fjollede i det nu egentligt.... Men da siden desværre er færdigbygget, men snart skal bygges om, må jeg bruge en midlertidig løsning:)
Avatar billede jakobdo Ekspert
03. april 2006 - 18:17 #16
Du kunne lave noget grimt ala:

if(preg_match('/src="((http|https|ftp):\\\/\\\/[^\\s]+\\.(png|jpg|jpeg|gif))"/i', $input, $output)) {
    echo $output[1];
}

Men det er ikke smukt...

Det gælder jo om at finde billederne.
Avatar billede kongfjong Nybegynder
08. april 2006 - 12:10 #17
Du skal lige have lidt point;)
Avatar billede jakobdo Ekspert
08. april 2006 - 14:25 #18
Svar!
Avatar billede jakobdo Ekspert
08. april 2006 - 16:50 #19
takker for point
Avatar billede kongfjong Nybegynder
20. april 2006 - 18:50 #20
Ved ikke om du følger denne tråd endnu, men gider måske forklare lidt nærmere hvordan jeg skal bruge den funktion resize() som du beskrev omkring rezising af billeder?
Avatar billede jakobdo Ekspert
20. april 2006 - 20:41 #21
Du bruger det på følgende måde:
Efter dit billede er blevet uploadet, så laver du:

resize(UPLOADET_BILLEDE, NAVN_PÅ_NYT_BILLEDE, MAX_HØJDE, MAX_BREDDE);
Avatar billede kongfjong Nybegynder
20. april 2006 - 21:07 #22
Altså når man har oploadet billedet på serveren, eller når man skriver url'en i sit indlæg?
Avatar billede jakobdo Ekspert
20. april 2006 - 21:14 #23
Det nemmeste er at lave det når du uploader, så skal det kun laves engang.
Ønsker du at resize billedet så du kun gemmer det resizede billede eller vil du gemme original og det resizede billede?
Avatar billede kongfjong Nybegynder
20. april 2006 - 21:27 #24
Tja egentligt fungerer forummet sådan mht billeder, at folk selv smider deres billeder op diverser steder på nettet og så bare smider et link til det:)
Avatar billede jakobdo Ekspert
20. april 2006 - 21:37 #25
Så skal du jo evt bruge resize on-the-fly, det kan dog blive lidt tungt.
For så skal det jo gøres hver gang.
Avatar billede kongfjong Nybegynder
20. april 2006 - 22:30 #26
Ja, også derfor jeg gjorde det som jeg valgte i første omgang med et fast "Thumbnail" størrelse:)
Avatar billede jakobdo Ekspert
21. april 2006 - 08:26 #27
Men du kunne jo lave, så når de f.eks. linker til billedet i deres profil, så tjekker du om de netop gør det, henter billedet, resizer det og gemmer det på din server/webhotel.
Avatar billede kongfjong Nybegynder
21. april 2006 - 08:32 #28
I lige netop deres profil, oploader de billedet til vores server for at vi kan godkende det:)
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