[PHP] createimagefromjpeg loopt vast op grote foto's

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MadEgg
  • Registratie: Februari 2002
  • Laatst online: 09:50

MadEgg

Tux is lievvv

Topicstarter
Ik heb een scriptje dat na het uploaden van een foto via een formulier het wil resizen naar een formaat wat beter geschikt voor op internet.
Hiervoor wou ik o.a. createimagefromjpeg gebruiken, in een scriptje dat ik al eens eerder voor een andere site gemaakt heb en die daar ook nog steeds met succes gebruikt wordt. Hier werkt het ook, behalve bij foto's boven een bepaald formaat(dimensies, niet bestandsgrootte). Wat er dan gebeurd is dat het script volledig vast loopt, de uitvoer wordt gestaakt, de browser probeert ook niet nog meer te laten dus blijkbaar wordt er nog wel een end-of-page gestuurd oid. Er komt echter geen foutmelding.

Ik heb een foto van 2048x1536 (1,23 MiB) uit een digicam die ik met dit script probeer te resizen.
Hier loopt het script op vast. Zet ik de compressie op 10 zodat er nog maar 96 KiB overblijft, loopt het script nog steeds vast.

Als ik de foto resize met photoshop naar bijvoorbeeld 1333x1000 dan werkt het script wel weer naar behoren. 1536x1152 werkt dan weer niet. Waar de grens precies ligt ben ik nog niet achter maar dat maakt op zich niet zo heel veel uit natuurlijk.

Is er een manier om dit probleem te omzeilen zonder van tevoren photoshop te hoeven gebruiken?

Tja


Acties:
  • 0 Henk 'm!

  • DJ Buzzz
  • Registratie: December 2000
  • Laatst online: 19-09 08:24
Gok dat je aan het maximum geheugengebruik dat elke php script gebruiken mag. Zoek eens naar de volgende instelling in php.ini en maak de waarde wat groter:
code:
1
memory_limit = 8M

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Er staat in php.ini iets over de maximale geheugengrootte. Een plaatje van 2048x1526 heeft 2048x1526x3 bytes aan geheugen nodig, en die heb je niet vrij, gok ik. :)

'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.


Acties:
  • 0 Henk 'm!

  • MadEgg
  • Registratie: Februari 2002
  • Laatst online: 09:50

MadEgg

Tux is lievvv

Topicstarter
Ik kan zelf niet bij de php.ini omdat ik de server waarop dit script gehost wordt niet in eigen beheer heb, maar dat zou inderdaad dan wel eens het probleem kunnen zijn.
Ik zal eens informeren of deze opgehoogd kan worden.

Evengoed vind ik het dan nog steeds vreemd dat er geen foutmelding neergedumpt wordt...

Tja


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

PHP:
1
error_reporting(E_ALL);

En geen eventuele image header versturen, zodat de pagina gewoon als tekst gezien wordt, dat helpt ook nog wel eens. ;)

'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.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Kijk eens of je http://www.php.net/ini-set mag gebruiken.

Acties:
  • 0 Henk 'm!

  • MadEgg
  • Registratie: Februari 2002
  • Laatst online: 09:50

MadEgg

Tux is lievvv

Topicstarter
Hmm, als ik phpinfo() gebruik krijg ik te zien dat memory_limit is ingesteld op 8M.

Hoewel dit niet genoeg is voor een 2048x1536 foto(die met 2048x1536x3 op 9MiB uitkomt), moet het toch wel genoeg zijn voor een 1600x1200 foto(die met 1600x1200x3 op 5,49 MiB uitkomt), maar ook de 1600x1200 foto pakt hij niet.

error_reporting(E_ALL);

Voor de betreffende createimagefromjpeg() helpt niets, er verschijnt nog steeds geen foutmelding.

ini_set("memory_limit", "10M");

Doet ook niets, tenminste niet volgens phpinfo() dus ik neem aan dat dat betekent dat ik daar geen rechten toe heb.

Tja


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

ini_set() werkt, zoals je in de documentatie ook kan lezen, alleen voor de duur waarin het script waar die regel in staat. phpinfo() zal daar dus niets van laten zien, lijkt me. :)

'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.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
moet het toch wel genoeg zijn voor een 1600x1200 foto(die met 1600x1200x3 op 5,49 MiB uitkomt)
Nee, er wordt wel meer geheugen gebruikt. Zeker bij het aanpassen van afbeeldingen. Zo zal de resultaatafbeelding ook in het geheugen komen te staan.
-NMe- schreef op woensdag 04 mei 2005 @ 20:24:
ini_set() werkt, zoals je in de documentatie ook kan lezen, alleen voor de duur waarin het script waar die regel in staat. phpinfo() zal daar dus niets van laten zien, lijkt me. :)
Ook niet als je eerst ini_set aanroept en vervolgens gaat resizen?

[ Voor 42% gewijzigd door djluc op 04-05-2005 20:25 ]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

djluc schreef op woensdag 04 mei 2005 @ 20:25:
Ook niet als je eerst ini_set aanroept en vervolgens gaat resizen?
Jawel, dat kan dan juist weer wel. Eerst ini_set() aanroepen, en daarna resizen. Echter, als het script afloopt, dan wordt de hoeveelheid beschikbaar geheugen voor het volgende script weer teruggezet op die 8MB. Verder haalt phpinfo() voor zover ik weet zijn informatie uit php.ini, dus ini_set() heeft daar waarschijnlijk geen invloed op. :)

@TS: wanneer je het niet opgelost krijgt door de geheugenlimiet te vergroten, wanneer je überhaupt de geheugenlimiet niet hoger krijgt, dan zou je kunnen kijken op ImageMagick aanwezig is op je host. Dat is een extern programma, en heeft dus niets met die geheugenlimiet te maken. Bovendien is het een stuk sneller. :)

'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.


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb hier mijn memory limit op 64 MB staan, omdat dit ook nodig is bij foto's van 800x800

Maarja, 't werkt nu dus ga niks eidtten :P

Acties:
  • 0 Henk 'm!

  • MadEgg
  • Registratie: Februari 2002
  • Laatst online: 09:50

MadEgg

Tux is lievvv

Topicstarter
Nee, phpinfo() geeft 2 waardes voor memory_limit aan, de lokale waarde en de globale waarde.

Ik had er ook al aan gedacht dat er meer geheugen nodig is voor het bewerken. Het probleem is dat het script al vastloopt na het openen van het bronbestand, nog voordat er een doel-image is aangemaakt of wat voor bewerking dan ook heeft plaatsgevonden dus het geheugen op dat moment zou niet veel meer mogen zijn dan de grootte van het plaatje. In ieder geval niet 2,5 MiB groter.

ImageMagick ga ik even naar kijken, of dat beschikbaar is!

Tja

Pagina: 1