Mailinglisten-Archive |
Hallo Liste, ich habe mal eine Frage zur Speicherauslastung beim Neuberechnen von Bildern. Es sieht so aus, dass ein bestimmtes Modul ein JPG/PNG-Bild nach einem File-Upload entgegen nimmt und dann nach bestimmten Regeln neu berechnet. Die Regeln sind definiert und die Neuberechnung bezieht sich auf die Kantenlänge der Breite. Ich habe eine Funktion erstellt, die im Wesentlichen so verläuft (am Beispiel JPG): // Kantenlänge prüfen $picture_size = GetImageSize($file_src); if($picture_size[0] > $neue_kantenlaenge) { // Source-Bild Handler erstellen $temp_src = ImageCreateFromJpeg($file_src); // Destination-Bild Handler erstellen $temp_dst = ImageCreateTruecolor($new_edge_length,$new_height); // Daten rüberschaufeln ImageCopyResized($temp_dst,$temp_src,0,0,0,0,$neue_kantenlaenge,[...]); // Destination-Bild speichern ImageJPEG($temp_dst,$file_dst,$compression); ImageDestroy($temp_src); // Bild-Handler freigeben ImageDestroy($temp_dst); // Bild-Handler freigeben } Pro upgeloadetem Bild geschehen maximal fünf Neuberechnungen. Die Funktion wird also maximal fünf mal aufgerufen. Und währenddessen rennt mir mein Server dann in einen Speicherüberlauf, wenn das Ausgangsbild im JPG größer als ca. 300kb ist. Bei PNG ist es sogar noch drastischer, hier kann man gar keine Ausgangsgröße festlegen, wann *sicher* mit einem Speicherüberlauf zu rechnen ist. Nun meine Frage(n): 1. Weiß jemand, ob in meinem Scriptablauf vielleicht noch ein Fehler steckt? 2. Weiß jemand, wie man zur Laufzeit die benötigte Speichermenge messen kann? Ich würde gerne rausfinden, woran genau es scheitert. 3. Leider entsteht ein ziemlich blöd aussehender Fehlercode, den es zu verhindern gilt. Wenn also absehbar ist, dass das Bild nicht berechenbar ist (weil zu groß), dann möchte ich dem Benutzer das auch gerne in Form einer normalen Mitteilungsagen ausgeben und nicht via *Serverfehler*... Danke für Eure Meinungen und Ansichten. Grüße Tim
php::bar PHP Wiki - Listenarchive