14 berichten aan het bekijken - 1 tot 14 (van in totaal 14)
  • Q:
    Bijdrager
    The JM

    [php] Allowed memory size (foto’s resizen met zelfde ratio?)

    Ik heb een scriptje geschreven om een foto-album te weergeven. Nu probeer ik gewoon onbewerkte foto’s (5 MP) te gebruik in het script, maar dan krijg ik deze melding:

    Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 2560 bytes) in fotos.php on line 97

    Ik heb geen toegang tot de config van php. Is het ook op een andere manier op te lossen?

    Zo nee, hoe kan ik ervoor zorgen dat tijdens het uploaden van de foto’s (wat via een formuliertje via een webpagina gebeurt) de foto’s van formaat wijzigen, maar wel in dezelfde verhouding?

    Bijdrager
    readefries

    Het geheugengebruikt van PHP is veelal gelimiteerd. Het lijkt erop dat je script meer dan 20mb nodig heeft voor het verwerken van de foto. Je zou de foto’s met automater kunnen verkleinen voor je ze upload.

    Bijdrager
    Jello

    -> google er even op.

    In Apache staat er dat PHP standaard XX MB ram krijgt.

    Via een .htaccess bestand kan je dit maximum aantal verhogen tot een grens opgelegt door je webhost.

    Opgelet: niet alle hosters maken het mogelijk om op deze manier jezelf meer ram toe te wijzen.

    Edit:
    in je .htaccess file
    [code:1:fb32a59401]php_value memory_limit 16M[/code:1:fb32a59401]

    maar i.p.v. 16 bv 32 ofzo.

    Uiteraard moet je wel htaccess files mogen kunnen maken…

    Bijdrager
    The JM
    ”glitch”

    Het geheugengebruikt van PHP is veelal gelimiteerd. Het lijkt erop dat je script meer dan 20mb nodig heeft voor het verwerken van de foto. Je zou de foto’s met automater kunnen verkleinen voor je ze upload.

    De site is niet voor mij, dus ik wil gewoon dat php de bestanden na/tijdens het uploaden verkleint. Nu weet ik dat je bestanden kan verkleinen tot een bepaalde hoogte en breedte, maar kan ik ze ook verkleinen met dezelfde verhouding met een maximale hoogte en breedte?

    ”Jello”

    Edit:
    in je .htaccess file

    Dankje, dat ga ik eens proberen.
    Edit:
    Dat werkt, bedankt. Nu het resizen tijdens het uploaden nog.

    Inactief
    Anoniem
    Bijdrager
    The JM
    ”W0utR”

    Misschien ben je hier iets mee:
    http://www.sitemasters.be/?pagina=scripts/scripts&cat=9&id=512

    Als ik het goed heb wordt in dat script het originele bestand verkleind weergegeven. Maar dat wil ik niet, want dan heb je een hele lange laadtijd. Langer dan nodig is in ieder geval. Maar ik ga proberen of ik daar wat van mee kan nemen in mijn script. Bedankt.

    Inactief
    Anoniem
    ”The
    ”W0utR”

    Misschien ben je hier iets mee:
    http://www.sitemasters.be/?pagina=scripts/scripts&cat=9&id=512

    Als ik het goed heb wordt in dat script het originele bestand verkleind weergegeven. Maar dat wil ik niet, want dan heb je een hele lange laadtijd. Langer dan nodig is in ieder geval. Maar ik ga proberen of ik daar wat van mee kan nemen in mijn script. Bedankt.

    Dat weet ik wel, maar daarin staat wel hoe je foto’s verkleint :innocent:

    Bijdrager
    Jello

    @The JM: Foto’s verkleinen met PHP is niet zo lastig. je hebt er handige PHP librarys voor die wel geïnstalleerd moeten zijn.
    4 jaar geleden schreef ik al zo’n gelijkaardig verklein script.

    Bijdrager
    The JM

    Hoe deed jij toen resizen met dezelfde verhouding dan? Ik probeer het nu voor het eerste en dan lukt het natuurlijk niet meteen;)

    Bijdrager
    Jello

    1) Weet het path waar de images op de server staan (bij een form met multi-data in een /tmp/ directory ofzo)

    2) Lees images in afhankelijk van de extensie

    imagecreatefromjpeg – http://be.php.net/manual/en/function.imagecreatefromjpeg.php
    imagecreatefromgif – http://be.php.net/manual/en/function.imagecreatefromgif.php
    imagecreatefrompng – http://be.php.net/manual/en/function.imagecreatefrompng.php

    3) Vraag de huidige breedte/hoogte van de foto op
    imagesx – http://be.php.net/manual/en/function.imagesx.php
    imagesy – http://be.php.net/manual/en/function.imagesy.php

    4) Gebruik wat wiskundige verstand om een nieuwe width en height te berekenen dat voldoet aan jouw voorwaarden (bv. kleiner dan 500 op 500) en toch de verhouding bewaard. Als je dit niet kan moet je denk ik ook niet gaan programmeren;)

    5) Maak een nieuwe (lege) image aan met je nieuwe afmetingen
    imagecreatetruecolor – http://be.php.net/manual/en/function.imagecreatetruecolor.php

    6) Scale de originele foto en kopieer het verkleinde exemplaar in de ruimte die je maakte in stap 5

    imagecopyresized – http://be.php.net/manual/en/function.imagecopyresized.php

    7) bewaar ‘ergens’ de kleine foto

    imagejpeg – http://be.php.net/manual/en/function.imagejpeg.php
    imagepng – http://be.php.net/manual/en/function.imagepng.php
    imagegif – http://be.php.net/manual/en/function.imagegif.php

    8) Maak de ruimte in het geheugen terug vrij

    imagedestroy – http://be.php.net/manual/en/function.imagedestroy.php

    9) Schaam je nu zeer diep dat je dit zelf niet kan vinden

    en neen ik ga geen 100% voorgekouwde code geven, een ‘programmeur’ moet zelf toch ook nog ‘iets’ doen hé :wink:

    Bijdrager
    The JM

    Zo, dat is wel heel erg uitgebreid! Dankjewel man:D Tuurlijk moet een programmeur iets doen, ik vroeg ik helemaal niet naar voorgekauwde code. Hier ben ik zeker mee geholpen!

    Bijdrager
    sturb

    je kan ook door middel van een shell commando een programmatje draaien die dit allemaal voor je doet. Als het een linux bak/server is.
    Kijk dan maar eens naar het commandline programmaatje “convert” van imagemagick
    Veel makkelijker en nog eens veel sneller. Daarnaast hoef je niet de GD-library geinstalleerd te hebben.

    Bijdrager
    The JM

    Maar ik host de site niet zelf, werkt het dan ook? Want ik heb natuurlijk beperkte rechten.

    Bijdrager
    sturb

    Meestal staat het standaard wel erop. dmv een php commando: exec() of passthru() kun je kijken wat de server terug geeft… en dan weet je meteen of je het mag doen of dat je permission denied krijgt of dat je en not found krijgt.

14 berichten aan het bekijken - 1 tot 14 (van in totaal 14)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.