Avatar billede avminarm Juniormester
12. marts 2003 - 08:47 Der er 13 kommentarer og
1 løsning

Thumbnail - fra billede i DB

Jeg har flg kodesnips  - billede sættes ind i DB og billedet kan vises igen, men jeg ville gerne have lavet noget thumbnail enten ved upload af billedet og så gemme thumb i DB eller generere en thumb når billedet hives ud af DB igen - hvordan gør jeg - jeg har rodet lidt med GD lib, men kan ikke få det til at fungere?

#################################################
/* action.php - filen der putter billedet i DB */
#################################################

$filename=$_FILES['pic']['tmp_name']; //Den midlertidige fil der indeholder billedfilen

  //info om filtype
  $pictype=addslashes($_FILES['pic']['type']);

  if (is_uploaded_file($filename)) {
  $data = addslashes(fread(fopen($filename,"r"),filesize($filename)));
  $a=getimagesize($filename);
    $width=$a[0]; //bredde
    $height=$a[1]; //højde

    mysql_query("INSERT INTO billede (beskrivelse,billede,width,height,filetype) values ('Et billede','$data','$width','$height','$pictype')") or die (mysql_error());
} else {
    echo "Possible file upload attack. Filename: " . $_FILES['pic']['name'];
}

############################################
/* getid.php - finder den enkelte billede */
############################################

  $picid=addslashes($_GET['id']);

  $result=@mysql_query("select billede,filetype from billede where id='$picid'");
  $billede=@mysql_result($result,0,"billede");
  $type  =@mysql_result($result,0,"filetype");

  header("Content-type: $type");
  print $billede;

##################################
/* vis.php - fremviser billedet */
##################################

$res=mysql_query("select id,width,height from billede") or die (mysql_error());
  while ($row=mysql_fetch_array($res)) {
    print "<img src=\"getid.php?id=$row[id]\" width=\"$row[width]\" height=\"$row[height]\">";
  }
Avatar billede xyborx Nybegynder
12. marts 2003 - 08:52 #1
Hmm.. Et skud i tågen: Du bruger addslashes når du gemmer billedet, så måske skal der bruges stripslashes når billedet skal hentes?
Avatar billede xyborx Nybegynder
12. marts 2003 - 08:53 #2
Hov.. Jeg har misforstået.. sorry :o)
Avatar billede avminarm Juniormester
12. marts 2003 - 08:59 #3
xyborx>> jeg har "leget" lidt med dit script på http://www.xyborx.dk/image.php, men jeg kan ikke hitte ud af hvordan jeg kan bruge det i fiorbindelse med det script jeg har ??
Avatar billede xyborx Nybegynder
12. marts 2003 - 09:02 #4
Mit script fungerer kun med filer der ligger på harddisken. Dvs for at bruge det, er du nødt til at hente billedet fra databasen, gemme det (midlertidigt) på harddisken, og så køre mit script. Måske skulle jeg indbygge en database->thumbnail del i næste version. :)
Avatar billede xyborx Nybegynder
12. marts 2003 - 09:09 #5
Måske noget i retning af det her kan bruges?
  $picid=addslashes($_GET['id']);

  $result=@mysql_query("select billede,filetype from billede where id='$picid'");
  $billede=@mysql_result($result,0,"billede");
  $type  =@mysql_result($result,0,"filetype");

  $temp_name=tempnam('/tmp','thumb_');
  $temp_handle=fopen($temp_name,"w");
  fwrite($temp_handle,$billede,strlen($billede));
  fclose();

  imageresize($temp_name,640,480);

  unlink($temp_name);
Avatar billede avminarm Juniormester
12. marts 2003 - 09:13 #6
ja, men det kræver vel skrive rettigheder til disken ik? - det vil jeg helst undgå, men hvis man kan generere det i forbindelse med upload ville det være helt fint - jeg er bare ikke lige så skarp til det der GDlib (startede i går ;o])
Avatar billede xyborx Nybegynder
12. marts 2003 - 13:15 #7
Måske kan imagecreatefromstring funktionen bruges?
(http://www.php.net/manual/en/function.imagecreatefromstring.php)
Det må testes når jeg får tid.. :D
Ellers er der nok ikke andet at gøre, end at bruge midlertidige filer (tror i øvrigt ikke at mit eksempel ovenfor udgør nogen risiko. tempnam funktionen opretter en midlertidig fil med et unikt navn, og man risikerer derfor ikke at få overskrevet eksisterende filer).
Avatar billede avminarm Juniormester
12. marts 2003 - 13:35 #8
det er ikke risikoen som generer mig så meget, men at der skal chmodes, kan man måske bruge tmpfile() ??

Hmmm overvejer at tale med en eller anden så døgnet kan blive forlænget med et par timer - så du får tid ;oD
Avatar billede avminarm Juniormester
12. marts 2003 - 13:41 #9
Hvad nu hvis man resizer det i forbindelse med upload og lige ledes putter thumb i databasen - kan man det?
Avatar billede xyborx Nybegynder
12. marts 2003 - 17:03 #10
Så vidt jeg ved har alle læse+skrive rettigheder til /tmp (hvis vi snakker Linux og lignende), så chmod er ikke nødvendig.

Jeg kunne også tænke mig at døgnet blev længere.. Måske skulle man oprette et spørgsmål her, og spørge hvor i opsætningen af Jorden man kan forlænge døgnet? ;D

Om du resizer ved upload og gemmer både original og thumb, eller om du generer thumb ved download er ligemeget. Det kræver alligevel at billedet lige kommer en tur ned på harddisken (i hvertfald med min nuværende viden om image funktionerne).
Avatar billede avminarm Juniormester
13. marts 2003 - 09:36 #11
jeg har testet det du har lavet, men det virker ikke i stedet har jeg fundet noget på php.net og flette det ind i mit eget, som benytter billedet i Db til at generer en thumbnail - det må jeg nok kunne bruge

  $height = 200;
  $width = 200;

  $picid=addslashes($_GET['id']);

  $result=mysql_query("select billede from billede where id='$picid'") or die (mysql_error());
  while($row = mysql_fetch_array($result)){
  header('Content-Type: image/jpeg');

  $src_img = imagecreatefromstring($row['billede']);
  $dst_img = imagecreatetruecolor($width, $height);
  imagecopyresampled($dst_img, $src_img, 0,0,0,0, $width,$height, imagesx($src_img), imagesy($src_img));
  imagejpeg($dst_img);
  }
Avatar billede avminarm Juniormester
19. marts 2003 - 11:55 #12
hvis i vil have points for ulejligheden - så smid lige et svar - jeg bruger det jeg selv fandt ud af  - det virker helt perfekt
Avatar billede xyborx Nybegynder
19. marts 2003 - 17:13 #13
Hvis du selv fandt en løsning, så skal jeg ikke have nogen point for det. Snup dem selv ;)
Avatar billede avminarm Juniormester
19. marts 2003 - 21:23 #14
oki ;o)
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