[php] Createimgefromstring/jpg functie werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil foto's met php uploaden met httppost in mijn database, en dat werkt goed.

maar als ik ze probeer eerst te resizen en daarna pas in de databse te stoppen gaat het fout met het resizen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$frmData = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
                        $src_img = imagecreatefromstring($frmData);
                        $picsize = 500;
                        $new_w = imagesx($frmData);
                        $new_h = imagesy($src_img);
                        $aspect_ratio = $new_h / $new_w;
                        $new_w = $picsize;
                        $new_h = abs($new_w * $aspect_ratio);
                        $dst_img = imagecreatetruecolor($new_w,$new_h);
                        imagecopyresized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img));

// alles in db
$result = MYSQL_QUERY("INSERT INTO pic_bin (bp_catid,pb_bin,pb_byte,pb_userid,pb_text) ".
                                            "VALUES ('".$_REQUEST["pic_cat"]."','$frmData','$form_data_size','$intuserid','$form_data_name')",$db);


Vor de duidelijkheid: Zonder dat resize gedeelte werkt het gewoon.

Alvast bedankt!

oeps vergeten te vertellen:

dit is de foutmelding:
code:
1
Warning: imagecreatefromstring(): gd-jpeg: JPEG library reports unrecoverable error: in /home/httpd/vhosts/amphitrite.nl/httpdocs/mod_picture.php on line 134


eneuh ik heb het ook geprobeerd met imagecreatefromjpg, dat werkte ook niet. en mijn php is gecompiled met deze library want als ik het uit de db haal kan ie wel resizen met createimagefromstring.

[ Voor 23% gewijzigd door Verwijderd op 12-09-2003 12:59 ]


Acties:
  • 0 Henk 'm!

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Probeer de imagecreatefromstring eens toe te passen op de file zonder dat je eerst addslashes toepast. Dus:
PHP:
1
2
3
4
$frmData = fread(fopen(....));
            //resize code
$frmData = addslashes($frmData);
//schrijf naar DB

Acties:
  • 0 Henk 'm!

Verwijderd

Je draait addslashes() op binaire code. Dit is wel vereist om deze data in mysql te krijgen, maar imagecreatefromstring() gaat op z'n bek hierdoor.

[insert standaard foto's-in-db opmerking hier]

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 12 September 2003 @ 19:23:
[insert standaard foto's-in-db opmerking hier]
/me agrees met deze opmerking, maar ja hier zijn al genoeg woorden aan vuil gemaakt.

Het is trouwens ook verstandig de "r" door "rb" te vervangen (indien je op een windows platform werkt)

Verwijderd

Topicstarter
ok tnx het lukt nu beter.

Maar ik zit nu met een volgend probleem: Ik moet het plaatje met de nieuwe resolutie in de database plaatsen. Hoe maak ik nu een string van imagecopyresized?

Acties:
  • 0 Henk 'm!

Verwijderd

Gebruik overigens imagecopyresampled() ipv imagecopyresized; deze functie kent dezelfde parameters, maar produceert een veel betere kwaliteit!

Vereist echter wel een latere gd library.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 20 september 2003 @ 17:25: Hoe maak ik nu een string van imagecopyresized?
Van php.net:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
//Start buffering the output stream
    ob_start();

    // output the image as a file to the output stream
    Imagejpeg($im);
    
    //Read the output buffer
    $buffer = ob_get_contents();

    //clear the buffer
    ob_end_clean();

    //use $buffer as you wish...

Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

Verwijderd schreef op 21 september 2003 @ 02:29:
Gebruik overigens imagecopyresampled() ipv imagecopyresized; deze functie kent dezelfde parameters, maar produceert een veel betere kwaliteit!

Vereist echter wel een latere gd library.
Dit is inderdaad aan te raden. Bovendien wordt bijna overal nu wel de gd2 library ondersteund. Dus dat moet geen probleem zijn.

[ Voor 5% gewijzigd door dArtagnan op 21-09-2003 09:30 ]


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

$dst_img is de variabele die imagecopyresized/resampled terug geeft!

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thanks allemaal! het is me gelukt.


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
            $resource = fopen($file, "r");
            $size = filesize($file);
            $data = fread($resource, $size);
            
            //resize image to acceptable format (doesn't work fot now)

            $src_img = imagecreatefromstring($data);
            $new_w = imagesx($src_img);
        
            // if ($new_w >= 90 ) {         
                $new_h = imagesy($src_img);
                $picsize = 90;                  
                $aspect_ratio = $new_h / $new_w;
                $new_w = $picsize;
                $new_h = abs($new_w * $aspect_ratio);
                $dst_img = imagecreatetruecolor($new_w,$new_h);
                imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img));
                
                echo " nieuwe resolutie: $new_w bij $new_h <br /> ";                
                
                
                //Start buffering the output stream
                ob_start();
            
                // output the image as a file to the output stream
                Imagejpeg($dst_img);
                
                //Read the output buffer
                $buffer1 = ob_get_contents();

                //clear the buffer
                ob_end_clean();

                // get ready for mysql  
                $dbinput1 = addslashes($buffer1);
                
            // }
Pagina: 1