Geheugen bij afbeeldingen

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik heb een vreemd probleem wanneer ik afbeeldingen probeer te schalen met PHP.

ik heb deze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public function makeThumb($dir, $imageName){
    $bron = $dir . '/' . $imageName;
    //De hoogte en breedte ophalen van het plaatje
    $dimensions = getimagesize($bron);

    //Het plaatje inlezen in de variabele $image
    $image = imagecreatefromjpeg($bron);

    //een nieuw klein plaatje maken met de gewenste grootte
    $destination = imagecreatetruecolor($this->img_width, $this->img_width);

    //postitie voor kopieren bepalen (croppen)
    if($dimensions[0] < $dimensions[1]){
     $sourceY = ($dimensions[1]-$dimensions[0])/2;
     $sourceX = 0;
     $src_height = $dimensions[0];
     $src_width = $dimensions[0];
    } else {
     $sourceX = ($dimensions[0]-$dimensions[1])/2;
     $sourceY = 0;
     $src_height = $dimensions[1];
     $src_width = $dimensions[1];
    }

    imagecopyresampled($destination, $image, 0, 0, $sourceX, $sourceY, $this->img_width, $this->img_width, $src_height, $src_width);

    //Het plaatje opslaan
    $path = $dir . '/thumbs/' . $imageName;
    imagejpeg($destination, $path);

    //Het bronplaatje verwijderen
    imagedestroy($image);
    //Het doelplaatje verwijderen
    imagedestroy($destination);
}


Het probleem is dat ik deze foutmelding krijg met vermelding van de 7de regel van deze methode:
code:
1
Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 9344 bytes) in ...


Ik heb met behulp van 'memory_get_usage' het geheugengebruik onderzocht:
- bij het het starten van de methode: 1.25MB
- net voor imagecreatefromjpeg 1.25MB
- bij 'imagecreatefromjpeg' crasht het script, er is nochtans 40MB beschikbaar ...

Dit gebeurd bij het inladen van een afbeelding van 0.5MB (jpeg).

Iemand die raad weet? Of is dit normaal bij het inladen van afbeeldingen?

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
Lees dit topic eens, staan nuttige adviezen mbt jouw probleem in; Memory exhausted

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 10:13

Onbekend

...

Wat is de resolutie van jouw plaatje?

Speel ook Balls Connect en Repeat


  • DexterDee
  • Registratie: November 2004
  • Laatst online: 13:59

DexterDee

I doubt, therefore I might be

Even wat achtergrond informatie over de GD extensie:

Bij het initialiseren van een afbeelding van disk zal de hele afbeelding ongecomprimeerd in het geheugen gealloceerd worden. Laad je dus een plaatje in van 1000 x 1000 pixels, dan ziet de berekening er zo uit:

1000 x 1000 x 3 kleuren (RGB) = 3.000.000 bytes
1000 x 1000 x (3 kleuren (RGB) + 1 alpha kanaal) = 4.000.000 bytes

Afhankelijk of je een alpha kanaal gebruikt voor transparantie. Meestal wordt een truecolor image gebruikt waar alpha gebruikt wordt.

Bij het inladen van zeer grote foto's moet je dus rekening houden met een fors geheugengebruik:

5 megapixels ~= 20 Mib
8 megapixels ~= 32 Mib
10 megapixels ~= 40 Mib
12 megapixels ~= 48 Mib
18 megapixels ~= 72 Mib

Naast het hoofdplaatje moet je ook nog geheugen reserveren voor de thumbnail en voor de rest van het script. Hierdoor komt het gebruik nog wat hoger uit.

Klik hier om mij een DM te sturen • 3245 WP op ZW


Verwijderd

Topicstarter
Inderdaad, het probleem is de hoge resolutie. Ik heb me laten misleiden door de beperkte grootte van de afbeelding.

Ik heb nu de geheugenlimiet verhoogd, wat natuurlijk een logische oplossing was. Maar het is altijd interessant om de oorzaak te kennen.

Bedankt voor de hulp!