[php & mysql] Thumb genereren vanuit dbase

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 09:38

iMars

Full time prutser

Topicstarter
Hopelijk is de titel duidelijk.

Ik zit met een probleem :'(
Ik heb een website met daarop veel foto's. Maar ik ben niet tevreden met mijn thumbnail script. Zoals het nu gaat, wordt er eerst de volledige foto gegenereerd, en vervolgens weer verkleind.
M.a.w.: De bezoeker merkt er niks van, maar ik merk het wel in mijn bandbreedte.

Deze foto's zitten in een database (MySQL). De table ziet er als volg uit:
code:
1
2
3
4
5
6
7
8
9
CREATE TABLE foto (
  id int(11) NOT NULL auto_increment,
  id_kleding int(11) NOT NULL default '0',
  name varchar(64) NOT NULL default '',
  type varchar(64) NOT NULL default '',
  length int(11) NOT NULL default '0',
  content mediumblob NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;


Ik upload de foto's dmv het volgende stuk script:
code:
1
2
3
4
5
6
7
8
9
10
/* foto uploaden */
$content = fread($fp,filesize($HTTP_POST_FILES[foto1][tmp_name]));
fclose($fp);
$sql = "INSERT INTO foto VALUES(0,$last_id,'
" . $HTTP_POST_FILES[foto][name] . "',
'" . $HTTP_POST_FILES[foto1][type] . "','
" . filesize($HTTP_POST_FILES[foto1][tmp_name]) . "',
'" . addslashes($content) . "')";
@mysql_query($sql,$db) or Die(mysql_error());
mysql_close($db);


Om de foto te weergeven, gebruik ik het volgende script
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<? 
/* image.php */ 
if (!empty($id)) { 

  $sql = "SELECT type,length,content FROM foto WHERE id = '$id' LIMIT 0,1"; 
  $result = @mysql_query($sql,$db) or Die(mysql_error()); 
  while ($row = mysql_fetch_array($result)) { 
    Header("Content-Length: " . $row[length] . "\nContent-Type: " . $row[type]); 
    print $row[content]; 
  } 
  mysql_close($db); 
} 
?>


Tot nu toe werkt alles prima, foto's uploaden gaat prima, foto's weergeven gaat goed....
Maar nu het resizen ;(

Het volgende script gebruik ik om een thumnail te genereren
code:
1
2
3
4
5
6
7
8
9
10
11
<?
$src = ImageCreateFromJPEG('http://www.domein.nl/image.php?id='.$id);
$width = ImageSx($src);
$height = ImageSy($src);
$x = 100;
$y = 150;
$dst = ImageCreate($x,$y);
ImageCopyResized($dst,$src,0,0,0,0,$x,$y,$width,$height);
header('Content-Type: image/png');
ImagePNG($dst);
?>


Opzicht werkt dit "goed", maar de foto wordt eerst helemaal gemaakt, en vervolgens weer verkleind. Met als gevolg dat er extra bandbreedte wordt gebruikt, wat helemaal niet nodig zou zijn.
En de thumbnail script werkt alleen voor jpeg & png :(

Is het niet mogelijk om vanuit het thumbnailscript de data direct uit de database te halen en daarvan direct een thumbnail te genereren???
Weet iemand hier een oplossing voor? volgens mij moet het ook mogelijk zijn om gif, bmp en ander formaten te resizen ....

Ik heb echt van alles al geprobeerd. Google gebruikt, de search hier gebruikt... maar ik kan er gewoon niks over vinden. (Of ik moet stekeblind zijn 8) )

De volgende aanpassingen heb ik geprobeerd, maar werkte niet.
code:
1
2
3
4
5
6
7
$src = $row[content];

$src = ImageCreateFromJPEG($row[content]);

$src = ImageCreateFromJPEG('$row[content]');

etc.


edit: sorry voor de layout !

[ Voor 7% gewijzigd door iMars op 19-11-2003 23:43 ]

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 08-09 13:47
Eeeh, wild guess maar volgensmij heb je echt geen flauw idee wat je aan het maken bent en heb je alles tot nu toe met copy/paste in elkaar gegooid.

Paar tips:

- Sla foto's niet op in een database, daar zijn ze echt niet geweldig geschikt voor. Je http server kan veel beter/sneller/efficienter overweg met statische content als foto's. Een van de voordelen die je meteen hebt is dat de foto's ook meteen gecached kunnen worden wat jou _enorm_ in je bandwidth gaat schelen en wat je site ook meteen stukken sneller maakt.
- Lees eens een tutorial over PHP/MySQL :)

Je probleem is echt heel eenvoudig op te lossen, wil ik best voor je doen hoor mail me maar voor een offerte ;) Dit forum is bedoeld om je te helpen met problemen, niet om kant en klare oplossingen aan te dragen :)

Succes!

Acties:
  • 0 Henk 'm!

Verwijderd

je kan de thumbnail laten genereren op het moment dat het plaatje in de database gaat.. en die in een aparte column opslaan...

maar ik zou ze niet in een database opslaan als ik jouw was

scheelt ook weer in de serverload.. hoeft ie maar 1 keer een thumbnail te maken.

[ Voor 14% gewijzigd door Verwijderd op 19-11-2003 23:51 ]


  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 09:38

iMars

Full time prutser

Topicstarter
bartvb schreef op 19 november 2003 @ 23:49:
Eeeh, wild guess maar volgensmij heb je echt geen flauw idee wat je aan het maken bent en heb je alles tot nu toe met copy/paste in elkaar gegooid.
Ehm, nee en ja.
Ik weet idd niet 100% waar ik mee bezig ben. Maar weet wel in grote lijnen wat er gebeurd. En ja, het één en ander is idd copy/paste
Paar tips:

- Sla foto's niet op in een database, daar zijn ze echt niet geweldig geschikt voor. Je http server kan veel beter/sneller/efficienter overweg met statische content als foto's. Een van de voordelen die je meteen hebt is dat de foto's ook meteen gecached kunnen worden wat jou _enorm_ in je bandwidth gaat schelen en wat je site ook meteen stukken sneller maakt.
- Lees eens een tutorial over PHP/MySQL :)

Je probleem is echt heel eenvoudig op te lossen, wil ik best voor je doen hoor mail me maar voor een offerte ;) Dit forum is bedoeld om je te helpen met problemen, niet om kant en klare oplossingen aan te dragen :)

Succes!
ik vraag ok niet om kant en klare oplossingen, alleen hoe ik het thumb probleem op kan lossen.

een voorbeeld van wat ik uiteindelijk wil maken is:

http://www.picserve.nl/image.php?id=191&thumb=true
http://www.picserve.nl/image.php?id=191

Koop hier mijn P1 reader :)


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 08-09 13:47
Tja, wat je zou kunnen doen is het combineren van het script om een foto weer te geven (met de SELECT statement).

Kijk verder eens naar:

http://nl3.php.net/manual...imagecreatefromstring.php

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 09:38

iMars

Full time prutser

Topicstarter
bartvb schreef op 20 november 2003 @ 00:14:
Tja, wat je zou kunnen doen is het combineren van het script om een foto weer te geven (met de SELECT statement).

Kijk verder eens naar:

http://nl3.php.net/manual...imagecreatefromstring.php
THANX!!!!!! Dat was precies wat ik zocht!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<? 
/* image.php */ 
if (!empty($id)) { 
  $sql = "SELECT type,length,content FROM foto WHERE id = '$id' LIMIT 0,1"; 
  $result = @mysql_query($sql,$db) or Die(mysql_error()); 
  while ($row = mysql_fetch_array($result)) {
  
    $data = $row[content];
    $src = imagecreatefromstring ($data);
    $width = ImageSx($src);
    $height = ImageSy($src);
    $x = 100;
    $y = 150;
    $dst = ImageCreate($x,$y);
    ImageCopyResized($dst,$src,0,0,0,0,$x,$y,$width,$height);
    header('Content-Type: image/png');
    ImagePNG($dst);
    
  } 
} 
?>


Dit werkt!

Koop hier mijn P1 reader :)


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 08-09 13:47
Ok, dat is dan 50 euro op rekeningnummer 40.71.52.547, eindhoven :P

Maar eeh als het om veel foto's gaat zou ik echt serieus overwegen om of een bestaand gallery systeem te gebruiken of om je files allemaal files te laten en niet in je DB te proppen...

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 17-09 14:22
Of beter, kijk onder http://nl3.php.net/manual/en/function.imagecopyresampled.php

Dit is het commando dat je nodig hebt om dynamisch thumbjes aan te gaan maken.

"lha at lha dot ch" heeft in de comments bij dit commando een script gezet dat jij goed zou kunnen gebruiken. (hier 'publiceren' mag niet volgens het auteursrecht).

Dit veroorzaakt wel processorload op je server. Misschien is het dus beter om na te denken over een ander ontwerp.

../web/foto/

../web/foto/thumb/

bijv.

[ Voor 4% gewijzigd door T-MOB op 20-11-2003 00:54 . Reden: 't kan ook nooit in 1x goed.. :-) ]

Regeren is vooruitschuiven

Pagina: 1