Suchen
Inside Wiki
Nützliche Links
phpforum.de Tipp
 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard GD Speicherverbrauch

 
 

Inhalte

Was ist GD?


Das findest du hier: http://de.php.net/manual/de/intro.image.php
Im folgenden geht es um den Speicherverbrauch. Oft beginnt das große Wundern, wenn Bilder mit einer Dateigröße von 2MB nicht von PHP geladen werden können. Hier soll ergründet werden, wieso das so ist.

Leider gibt die Doku nicht zu allem erschöpfende Auskunft.

Wasserkopf


Nennen es wir mal den "Wasserkopf" W.
Jedes GD Image verbraucht grundsatzlich ein paar Kilobyte Speicher für die interne Verwaltung. Die größe des Wasserkopfes ist u.A. abhängig von der Y größe des Bildes. Auf meinem Testsystem sind das bei 1000 Zeilen ca 31KB. Die GD scheint ein Indexarray für die jeweiligen Zeilenanfänge zu erzeugen. Tests ergaben zwischen 24 und 80 Byte pro Zeile.
Zusätzlich wird Platz für die evtl. nötige Farbpalette reserviert.
Unabhängig von der Bildgrüße werden ca. 8KB reserviert

Es finden sich große Unterschiede zwischen den Systemen.


Bilder mit Farbpalette


Auch oft Indexierte Bilder genannt. Die Farbpalette umfasst, zumindest bei GIF Bildern, 256 Einträge. Damit stehen also 256 verschiedene Farben zur Verfühgung.
Das betrifft:
  • Alle GIF Bilder
  • manche PNG
  • per imagecreate() erzeugte Bilder

Für jedes Pixel reserviert GD 2 Byte.
Die Formel für den Speicherverbrauch N lautet also:
N = x * y * 2 + W

PHP Quellcode:
// testcode
$start = memory_get_usage();

$im = imagecreate(1000,1000); // bild erzeugen

$end = memory_get_usage();

echo 'Speicherverbrauch: ';
echo $end - $start;
echo ' Byte<br>';


Ausgabe: Speicherverbrauch: 2031456 Byte
Ein Bild der größe 1000 * 1000 Pixel braucht also 2 MB Hauptspeicher.



TrueColor Bilder


Das betrifft:
  • Alle JPEG Bilder
  • manche PNG
  • per imagecreatetruecolor() erzeugte Bilder

Für jedes Pixel reserviert GD 5 Byte.
Diese 5 Byte teilen sich auf in:
  • Farbe: Rot 1 Byte
  • Farbe: Grün 1 Byte
  • Farbe: Blau 1 Byte
  • Alpha Kanal 1 Byte
  • Und 1 Byte für KA was (wer es weiß, möge es hier bitte eintragen)


Die Formel für den Speicherverbrauch N lautet also:
N = x * y * 5 + W

PHP Quellcode:
// testcode
$start = memory_get_usage();

$im = imagecreatetruecolor(1000,1000); // bild erzeugen

$end = memory_get_usage();

echo 'Speicherverbrauch: ';
echo $end - $start;
echo ' Byte<br>';


Ausgabe: Speicherverbrauch: 5031456 Byte
Ein Bild der größe 1000 * 1000 Pixel braucht also 5 MB Hauptspeicher.

Die modernen Digitalkameras schaffen 10 MegaPixel. Ein solches Bild kommt dann innerhalb von PHP auf 50 MegaByte Speicherverbrauch. Die meisten MietWebspaces sind damit überfordert.


Mitwirkende: combie
Erstellt von combie, 16.04.2008 am 13:14
Zuletzt bearbeitet von combie, 17.06.2008 am 09:23
8 Kommentare , 6077 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Stichworte
grundlagen, images

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
unterschiedlicher Speicherverbrauch bei serialize() q_no PHP 5 04.12.2006 12:59
Speicherverbrauch von MySQL für einen bestimmten Query messbar? swonz Datenbanken 1 02.12.2005 17:04
Wie kann ich den Speicherverbrauch des aktuellen Sctips messen? cyberchild PHP 1 11.05.2005 19:46
Minimaler Speicherverbrauch des Php-interpreters sunlooker PHP 3 01.07.2004 14:17
Hilfe zu Speicherverbrauch... Patrick PHP 0 01.01.1970 01:00


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:42 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC