[PHP, MySQL en GD] Resize probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
Alvorens het probleem waar ik tegenaan loop uit de doeken te doen wil ik even vermelden dat ik gezocht heb op google en hier op GoT.
Ook op PHP.net heb ik nog wat gezocht, zonder resultaat.

Voor een kleine fotogalerij wil ik mijn foto's met behulp van PHP in mijn MySQL database proppen.
Dit wil opzich goed lukken, maar ik wil er ook thumbnails bij hebben.
Deze worden van de originele afbeelding gemaakt dmv GDlib, maar hier gaat iets fout.
Namelijk elke keer als ik een foto upload komt de originele foto goed in de database, maar de resized versie is altijd 147bytes groot en geeft geen plaatje als ik hem probeer op te roepen.
Nergens krijg ik foutmeldingen en ik vraag me af wat er nu mis gaat.

de code van het uploadscript:
PHP:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
include('./func.inc.php');
#connect to mysql database
$link = mysql_connect($db_host, $db_user, $db_pwd)
    or die(errorhandler(mysql_error()));
mysql_select_db($db_name)
    or die(errorhandler(mysql_error()));

cms_header("Foto Uploaden","");

if(IsSet ($_POST["filesubmit"])) {
    if ($_FILES['foto']['type'] == "image/jpeg") {
        $bestandsnaam = $_FILES['foto']['name'];
        $tempnaam = $_FILES['foto']['tmp_name'];
        $bestandsomvang = $_FILES['foto']['size'];
        $bestandstype = $_FILES['foto']['type'];
        
        $fopen = fopen ($tempnaam, 'r');
        $inhoud = fread ($fopen, filesize ($tempnaam));
        $src_image = imagecreatefromstring($inhoud); // try to create image
        #$inhoud = addslashes ($inhoud);
        fclose($fopen);
        
        if (!$src_image) { 
                die ("Helaas. Het is niet gelukt om de foto ".$bestandsnaam." te lezen. Kies een andere foto in JPG formaat.");
        }
        
        $width_tnail = imagesx($src_image);
        $height_tnail = imagesy($src_image);

        $dest_width_tnail = "160"; 
        $dest_height_tnail = "120"; 
        $dest_img_tnail = imagecreatetruecolor($dest_width_tnail, $dest_height_tnail); 
        $result_tnail = imagecopyresampled($dest_img_tnail, $src_image, 0, 0, 0, 0, $dest_width_tnail, $dest_height_tnail, $width_tnail, $height_tnail);// resize the image 
             
        ob_start();
        imageJPEG($result_tnail, '', 75);
        $binaryThumbnail = ob_get_contents();
        ob_end_clean();
     
        #if(!get_magic_quotes_gpc()) $bestandsnaam = addslashes ($bestandsnaam);
        set_time_limit (9999);
        $succes = mysql_query ("INSERT INTO site_fotos (name, type, content, content_thumb) VALUES ('".$bestandsnaam."', '".$bestandstype."', '".addslashes($inhoud)."', '".$binaryThumbnail."')");
        
        if($succes == false) echo "Het uploaden van ".$bestandsnaam." is mislukt...";
        else echo $bestandsnaam." is succesvol geupload naar je database...";
    } else {
    echo "Het geselecteerde bestand is geen JPEG afbeelding.<BR>";
    }
}
else
{
echo "<form method=\"POST\" enctype=\"multipart/form-data\">
<input name=\"foto\" type=\"file\"><br>
<input name=\"filesubmit\" type=\"submit\" value=\"Upload\">
</form>";
}

cms_footer();

#close database connection
mysql_close($link);
?>

Ik moet erbij zeggen dat ik de scripts niet helemaal zelf geschreven heb, maar dat ik de resizefunctie ergens via google heb gevonden. Mijn kennis van GD is ook niet bepaald hoog te noemen, maar wat voor zover ik het begrijp, zou de code in theorie moeten werken.

Iemand een suggestie?

edit: maybe zijn versienummers nog belangrijk....
PHP 4.4.0
GDlib 2.0.28
Apache 1.3.33
MySQL 4.0.25

draaiend onder Win2K SP4 met alle updates
op een Intel P166 met 80MB RAM

[ Voor 22% gewijzigd door McKaamos op 16-08-2005 23:01 . Reden: typo ]

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • Rob
  • Registratie: Februari 2000
  • Niet online

Rob

Heb je al geprobeerd het resultaat van de resize actie te tonen ipv op te slaan in de database?
Dit dmv JPG headers mee te geven en binarythumbnail te echo'en.

In the beginning the Internet was a bunch of smart users with dumb terminals. Now...


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
-Rob- schreef op dinsdag 16 augustus 2005 @ 23:18:
Heb je al geprobeerd het resultaat van de resize actie te tonen ipv op te slaan in de database?
Dit dmv JPG headers mee te geven en binarythumbnail te echo'en.
dan krijg ik "The image "http://192168.0.66/cms/foto_upload.php" cannot be displayed because it contains errors" te zien.

edit: die tekst is trouwens niet te selecteren....

[ Voor 11% gewijzigd door McKaamos op 16-08-2005 23:27 ]

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

FireWurX schreef op dinsdag 16 augustus 2005 @ 23:26:
dan krijg ik "The image "http://192168.0.66/cms/foto_upload.php" cannot be displayed because it contains errors" te zien.

edit: die tekst is trouwens niet te selecteren....
Zet er dan eens header('Content-type: text/plain') boven. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
-NMe- schreef op dinsdag 16 augustus 2005 @ 23:29:
[...]

Zet er dan eens header('Content-type: text/plain') boven. :)
als ik header even wegcomment en dan de inhoud echo krijg ik "Warning: imagejpeg(): supplied argument is not a valid Image resource in d:\wwwroot\cms\foto_upload.php on line 39"

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • Vesta
  • Registratie: November 2004
  • Niet online
Returns TRUE on success or FALSE on failure.
dus $result_tnail is een boolean en geen image resource.
edit:
En dat komt dus overeen met de foutmelding die je krijgt

[ Voor 17% gewijzigd door Vesta op 16-08-2005 23:37 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zo'n vermoeden had ik al. Je gebruikt op regel 20 imagecreatefromstring om een image aan te maken. Ik vermoed dat het daar fout gaat. In plaats van de file in te lezen en daarna een image te maken van de string, kun je beter ImageCreateFromJPEG (of PNG, GIF, WBMP, enz) gebruiken, dat lijkt me iets waterdichter.
Edit: Vesta heeft gelijk, je moet in ImageJPEG $dest_img_tnail hebben, niet $result_tnail.

Verder wil ik je graag even verwijzen naar P&W FAQ - Image Manipulation in PHP, waar o.a. wat informatie staat over hoe je makkelijker kan debuggen bij het aanmaken van images.

Nog een laatste tip: gebruik liever het filesystem om je thumbnails op te slaan, en niet de database. Ten eerste bespaart je dat een hele hoop gezeur, en ten tweede is een database hier IMO niet echt voor bedoeld. Maar die discussie is hier al vaker gevoerd, dus daar zal ik verder niet op aandringen. :P

[ Voor 6% gewijzigd door NMe op 16-08-2005 23:39 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
ok, ik voel me nu een beetje dom... dit had ik eigenlijk zelf moeten kunnen vinden....
maargoed, het werkt nu, en wil jullie bedanken voor de hulp :)

btw, plaatjes in een database is wat minder hotlink/leech gevoelig ;) daar is et em om te doen.

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

FireWurX schreef op dinsdag 16 augustus 2005 @ 23:50:
btw, plaatjes in een database is wat minder hotlink/leech gevoelig ;) daar is et em om te doen.
Ow? :P Je kan net zo makkelijk naar een script linken als naar een los bestand hoor. Verder kun je losse files ook prima tegen hotlinking beveiligen. Dat kan met PHP, maar ook in Apache als ik het me goed herinner. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
-NMe- schreef op dinsdag 16 augustus 2005 @ 23:52:
[...]

Ow? :P Je kan net zo makkelijk naar een script linken als naar een los bestand hoor. Verder kun je losse files ook prima tegen hotlinking beveiligen. Dat kan met PHP, maar ook in Apache als ik het me goed herinner. :)
oh, dan ben ik daar niet van op de hoogte ;)
dit is iig wat ik (een beetje) ken en waarmee ik het kan beveiligen.
maargoed hier beginnen we geen discussie over ;)

nogmaals bedankt voor de hulp :)

Iemand een Tina2 in de aanbieding?

Pagina: 1