phpbar.de logo

Mailinglisten-Archive

[php] Fragen zum Neuberechnen von Bildern und Speicherüberlauf

[php] Fragen zum Neuberechnen von Bildern und Speicherüberlauf

Tim Hildebrandt TConnect at gmx.net
Mit Sep 29 11:52:55 CEST 2004


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