[php] Image resize op forum

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik werk nu al enige maanden aan een nieuwe update voor mijn forum. Deze keer wil ik ook graag erbij hebben dat images die te breed voor het forum zijn geresized worden (middels css of gewoon hard de height/width te zetten), hier loop ik echter toch tegen een probleempje aan.

Met de volgende code werkt het inmiddels wel, maar tergend traag! Waarom weet ik eigelijk niet dus daar zou ik zowiezo graag tips voor hebben..

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//de aanroep
$preg = array("/\[img]([^[]*)\\[\/img]/ie");
$preg_ = array('make_imgtag("\1",400,400)');
$text = preg_replace($preg,$preg_,$text);

function make_imgtag($url, $max_w, $max_h) {
        $hacks = array("onblur", "onchange", "onclick", "ondblclick", 
"onkeydown", "onkeypress", "onkeyup", "onload", 
"onmousedown", "onmousemove", "onmouseout", 
"onmouseover", "onmouseup", "onreset", "onselect", 
"onsubmit", "onunload" );

        $size = getimagesize($url);
        $i_max = count($hacks) - 1;

        for($i; $i <= $i_max; $i++)
        {
            if(strstr(strtolower($url), $hacks[$i]) != "")
              return '<b>no java accepted in an image tag</b>';
        }

        //echo "$url : $size";

        if ($size != false)
        {
            if ($size["0"] > $max_w || $size["1"] > $max_h)
            {
                $scale = min($max_w/$size["0"],$max_h/$size["1"]);
                $size["0"] = round($scale*$size["0"]);
                $size["1"] = round($scale*$size["1"]);
            }
            return "[img]'$url'[/img]";
        }

        return "<a href='$url' target='_blank'>image not available</a>";
    }


Nou is mijn vraag dus waarom het zo traag is en of dit wel een verantwoorde manier is. Wat zijn eventueel andere mogelijkheden? Op fok.nl forum loopt het allemaal erg gesmeerd.. zo zou ik het ook willen.

Bedankt.

[ Voor 34% gewijzigd door Verwijderd op 13-04-2004 17:13 ]


Acties:
  • 0 Henk 'm!

  • Willem
  • Registratie: Februari 2001
  • Laatst online: 18-09 15:13
PHP != W&G :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
stupid me. admin plz move :X

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

--> Programming & Webscripting

alstu :)

Hoewel JS hiervoor natuurlijk ook best wel geschikt is ;)

[ Voor 34% gewijzigd door crisp op 13-04-2004 17:23 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok bedankt.

Wat mij dus vooral tegen het hoofd stoot is het feit dat het laden van de pagina op deze manier erg lang duurt! (omdat getimagesize() de plaatjes moet binnenhalen alvorens hij de afmetingen kan bepalen..?)

Acties:
  • 0 Henk 'm!

  • flexje
  • Registratie: September 2001
  • Laatst online: 12:34

flexje

got-father

Ja waarom gebruik je geen javascript dan?
Zijn genoeg kant en klare scripts/topics hierover.
check bijvoorbeeld:
http://gathering.tweakers...avascript,resize,plaatjes

Search gebruikt

"Try not to become a man of success but rather to become a man of value..."


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50

PanMan

Spun!

Ik denk eigenlijk vooral dat je Getimagesize de boel nogal ophoud... Elk plaatje wordt nu dus volledig opgehaald. Ik weet niet wanneer je deze code uitvoert, maar als je dat altijd doet als je topic wordt opgevraagd, gaat dit je ook flink veel verkeer opleveren. Ik had voor een gastenboek eerst iets soortgelijks, maar vond het te traag (en vaak ook niet, als getimagesize bij grote plaatjes haperde) werken. Ik heb dat opgelost door m'n plaatjes altijd 400 pix breed te maken, en in mijn geval kon dat redelijk goed, maar ik kan me voorstellen dat je dat op een forum niet wil (externe smilies wil je b.v. niet op 400 pix hebben :)).

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50

PanMan

Spun!

Dat vind ik een sjieke oplossing Crisp! Die ga ik ook doen in mijn guestbook! Vooral die 2e, die ook kan scalen. Morgen eens testen...

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PanMan schreef op 14 april 2004 @ 01:12:
Ik denk eigenlijk vooral dat je Getimagesize de boel nogal ophoud... Elk plaatje wordt nu dus volledig opgehaald. Ik weet niet wanneer je deze code uitvoert, maar als je dat altijd doet als je topic wordt opgevraagd, gaat dit je ook flink veel verkeer opleveren. Ik had voor een gastenboek eerst iets soortgelijks, maar vond het te traag (en vaak ook niet, als getimagesize bij grote plaatjes haperde) werken. Ik heb dat opgelost door m'n plaatjes altijd 400 pix breed te maken, en in mijn geval kon dat redelijk goed, maar ik kan me voorstellen dat je dat op een forum niet wil (externe smilies wil je b.v. niet op 400 pix hebben :)).
precies. dat is het probleem met getimagesize, maar ik heb het nu opgelost als volgt.

Op het moment van posten check ik met getimagesize of de img afmetingen buiten de gestelde limiet vallen, zo ja dan maak ik van de [img] tag een [img h=x w=x] tag, zo niet dan blijft het gewoon een [img] tag.

Bij de weergave van de replies convert ik de [img] naar een image en de [img h=x w=x] ook, maar daarbij zet ik ook de heigth en width properties van de <img> tag.. en klaar is kees.

Op deze manier hoef ik niet tijdens het weergeven nog eens te gaan checken voor elke afbeelding met getimgsize. Enige minpunt hieraan is dat als mensen een hele grote img op afstand uploaden die eerst aan de gestelde afmetingen voldeet.. dan heb je dus een probleem :)

Die 2e javascript oplossing ziet er ook vrij goed uit moet ik zeggen. Ik ga overwegen alles er nog uit te slopen en het zo te gaan doen, maar ik blijf erbij: hoe lossen de "grote" jongens dit op? Fok! forum werkt ook met javascipt bijvoorbeeld?
Pagina: 1