Tom: GD-LIB: TrueColor

Hello,

könnt Ihr mir sagen, wieviele Bits und wieviele Kanäle
ImageCreateTrueColor() verschlingt?
http://de2.php.net/manual/de/function.imagecreatetruecolor.php

Ich würde jetzt mal raten 8 Bits, 3 Kanäle.

Es geht um die Berechnung des Speicherbedars.

  
function image_check_memory($_imageinfo)  ## X, Y, bits, channels  
{  
   $memoryNeeded = round(($_imageinfo[0] * $_imageinfo[1] * $_imageinfo['bits'] * $imageinfo['channels'] / 8 + 65536) * 1.65);  
   $memoryLimit = (int) ini_get('memory_limit') * 1048576;  
  
   if ((memory_get_usage() + $memoryNeeded) + MEMORY_LEFT > $memoryLimit) return false;  
  
   return true;  
}  

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  1. Hello,

    nur für's Archiv.
    Bisher klappt das so ganz gut.
    Keiner der Tests hat bisher einen Out-of-Memory gegeben

    function image_check_memory($_imageinfo, $memleft = MEMORY_LEFT)  ## (X, Y, bits, channels), Rest
    {
       ## fehlende Angaben durch Raten ergänzen
       if (!isset($_imageinfo['bits'])) $_imageinfo['bits'] = 8;
       if (!isset($_imageinfo['channels']) and $_imageinfo['bits'] == 24) $_imageinfo['channels'] = 1;
       if (!isset($_imageinfo['channels'])) $_imageinfo['channels'] = 3;

    $memoryNeeded = round(($_imageinfo[0] * $_imageinfo[1] * $_imageinfo['bits'] * $_imageinfo['channels'] / 8 + 65536) * 1.65);
       $memoryLimit = intval(ini_get('memory_limit')) * 1048576;

    if ((memory_get_usage() + $memoryNeeded) + $memleft > $memoryLimit)
       {
         error_log('IMAGE_MEMORY usage: '.memory_get_usage().", needed: $memoryNeeded, limit: $memoryLimit\n", 3, '/var/log/web04/php_error_log');
         return false;
       }

    return true;
    }

      
      
    getimagesize() liefert nur ncht immer Werte für bits und channels.  
    So gut gefällt mir das daher noch nicht.  
      
    Wenn man aber einen Stapel mit 300 unterschiedlichen Grafiken abarbeiten will, soll die Schleife nicht mittendrin aussteigen.  
      
      
      
      
    Harzliche Grüße vom Berg  
    <http://bergpost.annerschbarrich.de>  
      
    Tom
    
    -- 
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen  
    Nur selber lernen macht schlau  
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)  
      
    ![](http://bitworks.de/~selfHTML/Virencheck.gif)  
    
    
    1. Moin!

      getimagesize() liefert nur ncht immer Werte für bits und channels.
      So gut gefällt mir das daher noch nicht.

      Wenn man aber einen Stapel mit 300 unterschiedlichen Grafiken abarbeiten will, soll die Schleife nicht mittendrin aussteigen.

      ImageMagick nutzen. Oder die Speicherbegrenzung von PHP entfernen. Kommt beides auf dasselbe raus.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Hello,

        getimagesize() liefert nur ncht immer Werte für bits und channels.
        So gut gefällt mir das daher noch nicht.

        Wenn man aber einen Stapel mit 300 unterschiedlichen Grafiken abarbeiten will, soll die Schleife nicht mittendrin aussteigen.

        ImageMagick nutzen. Oder die Speicherbegrenzung von PHP entfernen. Kommt beides auf dasselbe raus.

        Naja, ich habe es damals in der Agentur, schon geschafft, mit 128MB Speicher für das Script nicht auszukommen. Die GD-LIB ist da gnadenlos.

        Leider sind alle Lösungen, die ich damals schon erarbeitet hatte, samt PC und Datansicherungs-Platte bei einem Einbruch geklaut worden. Sonst habe ich sie immer mit nach Hause genommen, nur ausgerechnet an diesem Tag hatte ich es vergessen :-((

        Ich erinnere mich auch dunkel daran, dass ich da eine andere Abfragefunktion aufgetrieben/bzw. aus mehreren zusammenbaut hatte, die mir bessere Informationen geliefert hat über das zu verarbeitende Bild und auch gleich ausgerechnet hat, wieviel Speicher dies beim Auspacken verschlingen würde.

        Ich habe schon alle möglichen Suchmaschinen gequält, kann mich aber auch nicht mehr entsinnen, wonach ich damals wohl gessucht haben könnte.

        Wenn also noch jemand einen Tipp hätte, wäre ich hoch erfreut...

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. Moin!

    könnt Ihr mir sagen, wieviele Bits und wieviele Kanäle
    ImageCreateTrueColor() verschlingt?
    http://de2.php.net/manual/de/function.imagecreatetruecolor.php

    Ich würde jetzt mal raten 8 Bits, 3 Kanäle.

    Alphatransparenz verbraucht auch noch Speicher. Die gdlib verarbeitet ja problemlos 24-Bit-PNGs mit Halbtransparenz, das geht nur, wenn 32 Bits pro Pixel benutzt werden (auch wenn seltsamerweise der Alpha-Kanal der gdlib nur 7 Bit hat - warum auch immer.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."