[PHP] Nach Upload Bilder verkleinern

Dieses Thema im Forum "Webentwicklung" wurde erstellt von uRph03n1x, 10. Dezember 2012 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 10. Dezember 2012
    Zuletzt bearbeitet: 10. Dezember 2012
    Nach Upload Bilder verkleinern

    Hallo Community,

    bin gerade auf ein Problem gestoßen welches ich mir nicht erklären kann.

    Habe mir ein Upload-Script gebastelt, welches auch ohne Probleme funktioniert. Nach dem Upload soll er sich das Bild schnappen, gucken ob JPEG oder PNG und dementsprechend eine Funktion zum Verkleinern ausführen. Hier mal der Auszug der Funktion:

    PHP:
    <? php
    $size 
    getimagesize ( 'test/' . $upped_name . '' );
    $type  getimagesize ( 'test/' . $upped_name . '' );
    if (
    $type [ 2 ] ==  2 ) {  // Abfrage ob JPEG
    if ( $size [ 0 ]> 100 ) {  // Bilder sollen alle max 100px breit sein, höhe ist relativ dazu
    $neu_sizeb  100  $size [ 0 ];
    $neu_sizeb  $neu_sizeb  100 ;
    $neu_sizeh  $size [ 1 ] /  100 ;
    $neu_sizeh  $neu_sizeh  $neu_sizeb ;

    $src_img  imagecreatefromjpeg ( 'test/' . $upped_name . '' );  //Zeile 73
    $dst_img  imagecreatetruecolor ( 100 , $neu_sizeh );
    imagecopyresampled ( $dst_img $src_img 0 0 0 0 100 $neu_sizeh $size [ 0 ],  $size [ 1 ]);
    imagejpeg ( $dst_img 'test/thumb_' . $upped_name . '' );
    imagedestroy ( $src_img );
    imagedestroy ( $dst_img );
    }
    }
    ?>
    Der Upload funktioniert wie gesagt ohne Probleme, das Erstellen der Thumbs eingeschränkt. (bzw von Server zu Server unterschiedlich)

    Auf dem Webspace einer Vereinsseite bekomme ich beim Ausführen des Scripts mit Bildern über ca 70 kB folgende Fehlermeldung:

    Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 7680 bytes) in /var/www/web335/html/upload/index.php on line 73

    Was ich jedoch nicht verstehe ist, das ich das memory size limit von 16 MB ja nichtmal ansatzweise erreiche und der eigentliche Upload auf dem Server ja erfolgt, nur die anschließende Verkleinerung nicht mehr?!

    Auf meinem Server funktioniert es, dort habe ich mein Memory Size Limit auch auf 16M eingestellt.

    Gibt es eine Möglichkeit diese Fehlermeldung zu umgehen? Kommt sie vom Server oder doch vom Script?

    Gruß
    uRph03n1x
     
  2. 10. Dezember 2012
    Zuletzt bearbeitet: 10. Dezember 2012
    AW: Nach Upload Bilder verkleinern

    Woher weißt du, dass du das 16mb Limit nicht erreichst?
    Ein JPEG ausgepackt im RAM kann locker 16mb belegen, kommt halt auf die Auflösung an.

    Zum ausrechnen: H * B * BPP / 8 = Bytes im RAM

    BPP = Bits per Pixel (in der Regel 24)
     
    1 Person gefällt das.
  3. 10. Dezember 2012
    AW: Nach Upload Bilder verkleinern


    Daran habe ich noch gar nicht gedacht, stimmt.

    Ich hab ein Beispielbild von: 1920 * 2000 und einer Bildtiefe von 24

    11520000 Bytes = knapp 11 MB

    also rein theoretisch noch 5 MB frei für diesen Prozess? Sollte also klappen?
     
  4. 10. Dezember 2012
    AW: Nach Upload Bilder verkleinern

    Eigentlich doch nicht, da du mit imageCreateTrueColor ein zweites erzeugst in das die verkleinerten Bilddaten des ersten kopiert werden.
    Jetzt kommt es drauf an wie viel Speicher das Verkleinerte benötigt.
     
    1 Person gefällt das.
  5. 10. Dezember 2012
    Zuletzt bearbeitet: 10. Dezember 2012
    AW: Nach Upload Bilder verkleinern

    Das zweite Bild mit 100 * 104 is jetzt nicht so tragisch, aber dazu kommen noch einiges an Ressourcen die von der GB Library und von PHP selbst belegt werden.

    16mb Speicher ist definitiv zu wenig um mit Bildern zu hantieren.
    Würde das auf 100mb / 200mb erhöhen (je nach dem wie viel du zur Verfügung hast).
     
  6. 10. Dezember 2012
    Zuletzt bearbeitet: 10. Dezember 2012
    AW: Nach Upload Bilder verkleinern

    Ok gehen wir nochmal von meiner ersten Rechnung aus:


    Ich hab ein Beispielbild von: 1920 * 2000 und einer Bildtiefe von 24 // eigentliche Dateigröße von 0,09 MB

    11520000 Bytes = knapp 11 MB


    welches nach meiner Formel im Script auf 100 * 104 BPP 24 verkleinert wird
    31200 Bytes = knapp 0,03 MB



    Da warst du leider schneller.

    Dann frag ich mich aber warum auf meinem Server phpinfo() 16M ausgibt und das Script dort funktioniert. Dann habe ich es wohl Global irgendwann für den Server geändert.

    Werde mich mal an den Webhoster von diesem Verein wenden und ihn freundlichst bitten mir den Wert auf 64M zu erhöhen.

    Aber vielen Dank für eure Informationen und die Rechenanstöße in meinem Kopf

    Gruß
    uRph03n1x
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.