[php] imagecreatefromgif

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik ben met een applicatie bezig waarmee ik A3 afbeeldingen bewerk op een resolutie van 300dpi (+- 4800px bij 3500px) nu is het probleem dat het laden van een gif afbeelding van deze formaten niet lijkt te gaan (puur witte afbeelding, dus 4800px bij 3500px @ 10kb)

ik weet dat werken met grote bestanden dit problemen met zich mee kan brengen, maar is er ook een limiet op aantal pixels? en zoja waar ligt deze en is deze ergens in te stellen?

kan er op php.net weinig tot niks over vinden, google levert ook niet erg veel nuttigs op

alvast bedankt

Acties:
  • 0 Henk 'm!

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 11:23

RM-rf

1 2 3 4 5 7 6 8 9

het is de GD LUIbrary die daar de GIF creatie en afhandeling verzorgd ...
als er problemen mee zijn is het waarschijnlijk dat het om specifieke GD problemen gaat

http://www.boutell.com/gd/faq.html

in php.ini staat het geheugengebruik door GD: memory_limit , als je dat verhoogd zal GD waarschijnlijk meer aankunnen ...

Ik zou in dit geval vermoeden dat ImageMagick juist voor grote bestanden veel effectiever zal kunnen werken.

[ Voor 3% gewijzigd door RM-rf op 20-12-2005 12:48 ]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Ondersteunt je gd-versie wel GIF? Doe 's een php_info() en kijk of GD er bij staat en of er iets over GIF-support staat.

Acties:
  • 0 Henk 'm!

  • cannibal
  • Registratie: Maart 2001
  • Laatst online: 16:49
De GD-library schrijft in zijn geheugen het hele plaatje uit naar hele pixels met kleurinformatie, dit kan dus bij dit soort bestanden echt flink uit de klauwen lopen.

Die memorylimit moet je dus echt flink hoog zetten (uitrekenen en dan nog wat extra overhead schat ik)

Gister bezig geweest met jpeg resizen in php en dan loop je bij het resizen van een 5mpix foto ook al vlug tegen problemen aan.
php.ini stond op 16MB, 32MB trok hij nog steeds niet, 256MB werkt voorlopig....

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
cannibal74 schreef op dinsdag 20 december 2005 @ 13:45:
De GD-library schrijft in zijn geheugen het hele plaatje uit naar hele pixels met kleurinformatie, dit kan dus bij dit soort bestanden echt flink uit de klauwen lopen.

Die memorylimit moet je dus echt flink hoog zetten (uitrekenen en dan nog wat extra overhead schat ik)

Gister bezig geweest met jpeg resizen in php en dan loop je bij het resizen van een 5mpix foto ook al vlug tegen problemen aan.
php.ini stond op 16MB, 32MB trok hij nog steeds niet, 256MB werkt voorlopig....
ja ik denk ook dat dit de oplossing is, maar kan helaas nu niet de server resetten, moet er morgen dus maar even naar kijken

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Welke GD-versie gebruik je?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
het ligt niet aan de GD, je doelt denk ik op " GIF support was removed from the GD library in Version 1.6, and added back in Version 2.0.28."

*kleinere gifs werken wel
*imagecreatefrompng en jpg werken ook niet

Acties:
  • 0 Henk 'm!

  • kamerplant
  • Registratie: Juli 2001
  • Niet online
Verwijderd schreef op dinsdag 20 december 2005 @ 13:49:
[...]
ja ik denk ook dat dit de oplossing is, maar kan helaas nu niet de server resetten, moet er morgen dus maar even naar kijken
Je zegt dat kleine GIFs wel werken, dan kan het inderdaad bijna nergens anders aan liggen dan aan de memory limiet. Wat ik wel raar vind, normaal gesproken moet je een error zien zodra de memory limiet wordt overschreden, staat error reporting bij jouw server soms uitgeschakeld?

🌞🍃


Acties:
  • 0 Henk 'm!

  • cannibal
  • Registratie: Maart 2001
  • Laatst online: 16:49
en volgens mij zit er ook nog een fout in de error-melding van gd-lib.
Hij gaf bij mij altijd een melding over 16898934 bytes, ook al stond ie de waarde in php.ini op 32MB.

Verwijderd

Topicstarter
na het verhogen van het memory limit werkt hij inderdaad wel, ik wilde nu eigenlijk alleen graag een e-mailtje laten versturen als een script het memory limit bereikt, ik krijg alleen niet altijd de foutmelding dat het memory limit is overschreden, iemand enig idee hoe dit te checken is?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Die melding zou er altijd moeten zijn als je de limiet overschrijdt, dus er zit waarschijnlijk iets niet helemaal goed in je php.ini of error_reporting setting. Kijk ook eens naar display_errors, misschien staat die wel op off.

Wat betreft een mail sturen wanneer het plaatje niet gemaakt kan worden, dan zou je zoiets kunnen doen:
PHP:
1
2
3
4
$img = @imagecreatefromgif('test.gif');
if (empty($img)) {
  trigger_error("Out of memory", E_USER_ERROR);
}

Met de volgende errorhandler:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
  switch ($errno) {
    case E_USER_ERROR:
      if ($errstr == 'Out of memory') {
        mail('jouw@mail.adres', 'Site: error!', 'Error! Ik heb geen geheugen meer!');
      }
    default:
      echo "<b>Error!</b> [$errno] $errstr in file $errfile at line $errline.<br />\n";
      exit(1);
      break;
  }
}

Daarbij wel de noot dat ik dit een redelijk vieze oplossing vind, en dat het waarschijnlijk wel beter zal kunnen. Je kan het ook gewoon inline doen:
PHP:
1
2
3
4
$img = @imagecreatefromgif('test.gif');
if (empty($img)) {
  mail('jouw@mail.adres', 'Site: error!', 'Error! Ik heb geen geheugen meer!');
}

Voordeel daarvan is dat je geen eigen error handler hoeft te schrijven, en daarmee dus nog gewoon errors van PHP zelf te zien krijgt. Ontwerptechnisch is het echter wat minder hoogstaand. :P

[ Voor 4% gewijzigd door NMe op 22-12-2005 10:20 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
PHP:
4
5
$img = @imagecreatefromgif('test.gif');
echo("ik kom hier niet eens");


mijn probleem ligt dus hier, de applicatie breekt gewoon af, geen foutmelding en het script loopt niet verder, dat heeft toch niets te maken met display_errors lijkt me zo.. ik zal nog eens goed kijken in php.ini

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ook met een @ ervoor kom je daar niet? Vaag... Tsja, als het script compleet stopt op het moment dat je bij die functie aankomt, dan is er vrij weinig dat je kan doen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Het probleem met het bereiken van een memory limit is dat de applicatie/php ook geen geheugen meer aanmaakt om fatsoenlijke fout afhandeling te doen. Hierdoor is in de meeste omgevingen het gedrag bij het overschreiden van een geheugen limit undefined. Mijn ervaring zegt mij dat dit voor php ook zal gelden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
tja wel aannemelijk

  • knopper
  • Registratie: September 2001
  • Laatst online: 07-09 23:05

knopper

Sander Knopper

Misschien overbodig om te zeggen maar heb je het script al gedraaid met error_reporting op 'E_ALL' ?
Pagina: 1