Memory Error

Zack

cookies vader
Hallo,
ich habe eine Funktion zum verkleinern von zugroßen Bildern in einem Upload. Ich bekomme folgenden Fehler:
HTML:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 13824 bytes) in C:\xampp\htdocs\PHP\peter\class.php on line 169
Die Funktion:
PHP:
	function resizeImage($sourcePath, $destPath, $maxWidth, $maxHeight) {
		$size = getimagesize($sourcePath);
		if($size[1]/$size[0] > $maxHeight/$maxWidth) {
	       $newHeight = $maxHeight;
	       $newWidth = floor($size[0]/$size[1] * $newHeight);
	    }else{
	       $newWidth = $maxWidth;
	       $newHeight = floor($size[1]/$size[0] * $newWidth);
	    }

	    $image = imagecreatefromjpeg($sourcePath);
	    $newImage = imagecreatetruecolor($newWidth, $newHeight);
	    imagecopyresampled($newImage, $image, 0,0,0,0, $newWidth, $newHeight, $size[0], $size[1]);
	    imagejpeg($newImage, $destPath);
	    imagedestroy($image);
	    imagedestroy($newImage);
	}
Der Aufruf:
PHP:
.....
$DST="../images/upload/";
....
$file=str_replace(" ", "", $_FILES['thefile']['name']);
....
resizeImage($DST.$file,  $DST.$file, "700", "1200");
....

Ich seh aber keinen Fehler und lege ja auch keine maximal nutzbare Größe fest. Wobei ich bei einen 2.4MB Bild eigentlich auch nicht ganz so viel in anspruch nehme. Das Bild wird auch nicht verkleinert so wie es eigentlich sein soll.

Hilfe ! :D
 
Die Einstellung wird in der php.ini festgelegt und heißt: memory_limit
Die Einstellung ist laut Fehlermeldung bei dir ungefähr auf 32MB.

Und 2.4MB sind es wahrscheinlich als JPEG, PHP arbeitet aber mit unkomprimierten Bildern, die um ein vielfaches mehr verbrauchen.
 
Ein ähnlichen Problem hatte ich auch mal, wobei die Fehlermeldung sehr lustig ist. Bei mir war der Fehler daß ich zur Laufzeit das Limit geändert habe, checke das mal.
EDIT: rechne mit den Speicherverbrauch ungefähr mit den dreifachen!
 
Zuletzt bearbeitet von einem Moderator:
EDIT: rechne mit den Speicherverbrauch ungefähr mit den dreifachen!

Das hängt meines Wissens ganz allein von den Proportionen des Bildes ab und kann sogar errechnet werden...

/Edit:

Die Dateigröße von 500kb ist natürlich im JPEG Format komprimiert, du müsstest allerdings mit der unkomprimierten Größe arbeiten, hier eine kleine Formel dafür (aus dem Coppermine Trouble Shooting, s. o.)



Basisfarben sind RGB (Faktor 3) oder CMYK (Faktor 4).

Für ein 1024x768 Pixel großes Bild mit RGB Farben, wären es:

Wenn deine Bilder also komprimiert schon 500kb groß sind, werden sie wahrscheinlich von einer Digicam o. ä. stammen die eine sehr hohe Auflösung benutzt...
Rechne dir das mal durch...

Allerdings passt das nicht ganz dazu, dass du auch versucht hast Kleinere zu nehmen. Mal versucht wirklich nur ein Minibild hochzuladen, dass nur ein paar KB groß ist?

Geklaut von mir selbst, hier: http://www.tutorials.de/forum/1282138-post4.html
 
Das hängt meines Wissens ganz allein von den Proportionen des Bildes ab und kann sogar errechnet werden...

Es ist ja auch nur ein Richtwert, den man jederzeit anpassen kann, aber mit den dreifachen kommen die meisten hin!

@Felix die Lösung wäre per Ajax Request die Größe bestimmen und danach das limit setzen... Wünsche auch dir schöne Feiertage ;)

EDIT: habe von dir nichts geklaut ;)
 
Zuletzt bearbeitet von einem Moderator:
Zurück