login  Naam:   Wachtwoord: 
Registreer je!
 Forum

resizen van grotere foto's

Offline Tony_mortana - 15/01/2007 18:43 (laatste wijziging 15/01/2007 18:43)
Avatar van Tony_mortanaPHP interesse Image resizen voor grote foto's lukt me niet!

Als ik grote foto's van boven de 500KB ongeveer probeer
kleiner te maken dan stopt mijn script op regel van:
$source = imagecreatefromjpeg($_FILES['bestand']['tmp_name']);

Kan iemand mij vertellen hoe dit op te lossen.
Volgende deel van mijn script gaat het verkeerd:

  1. <?php
  2. if($_FILES['bestand']['size'] > $max_size)
  3. {
  4. list($width, $height) = getimagesize($_FILES['bestand']['tmp_name']);
  5. $newwidth = $width / ($width/$max_width);
  6. $newheight = $height / ($width/$max_width);
  7.  
  8. $thumb = imagecreatetruecolor($newwidth, $newheight);
  9. $source = imagecreatefromjpeg($_FILES['bestand']['tmp_name']);
  10. // Resize
  11. imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  12.  
  13. // Output
  14. imagejpeg($thumb, $locatie_php.$destination, 90);
  15. echo "foto verkleind naar:".filesize($locatie_php.$destination)."<br/>";
  16. }
  17. ?>


PS: resizen van kleinere foto's rond 200kb naar 100kb lukt gewoon wel. 

7 antwoorden

Gesponsorde links
Offline yannick - 15/01/2007 18:48 (laatste wijziging 15/01/2007 18:49)
Avatar van yannick PHP interesse Klopt dit wel?

  1. $newwidth = $width / ($width/$max_width);
  2. $newheight = $height / ($width/$max_width);


Moet dit niet dit zijn:

  1. $newwidth = $width / ($width/$max_width);
  2. $newheight = $height / ($width/$max_height);
Offline xSc - 16/01/2007 09:25
Avatar van xSc Onbekend Het heeft ook met de capaciteit van de server te maken. Als ik een resize script draai op onze server, dan kan ik foto's van 3,5 MB probleemloos laten resizen. Als datzelfde doe op een server van WatSnel Hosting, dan wordt de foto na het verzenden niet geaccepteerd (staat niet in $_FILES). Het kan daar maar tot 1,5MB o.i.d. Misschien hetzelfde probleem bij jou.
Offline Tony_mortana - 16/01/2007 13:22
Avatar van Tony_mortana PHP interesse hmmmm yannick!
op mijn manier gaat de foto procentueel kleiner worden,
bij jou kan je foto nu helemaal vervormen!

Maar daar ligt het niet aan, want kleinere foto's doen het wel!

xSc,
Ik zat ook ongeveer zo te denken, dat het aan de server ligt
(instelling of zo) maar zou dus niet weten wat?

Kan jij misschien dat deel van jou script even posten,
kan ik vergelijken en evenkijken of het echt daaraan ligt!

Want mij script werkt wel, maar bij grotere foto's blijft hij gewoon
hangen op "imagecreatefromjpeg" krijg dan namelijk niets meer in beeld. (ff getest met echo's na elke opdracht)  
Offline Thomas - 16/01/2007 13:30 (laatste wijziging 16/01/2007 13:37)
Avatar van Thomas Moderator Dit kan zoveel oorzaken hebben. Waarschijnlijk een timelimit of een maxsize (serverinstelling) die overschreden wordt?

EDIT: nm.
EDIT2: bevat $_FILES['userfile']['error'] een waarde?

Je zou ook de volgende dingen kunnen wijzigen:
* (in .htaccess) verhoog php_value post_max_size, bjivoorbeeld naar 24M

* (in je upload-script) zet bovenaan je script set_time_limit(0)

Als je meerdere plaatjes tegelijkertijd upload loont het ook de moeite om tussendoor wat ruimte vrij te geven (verwijder plaatjes in het geheugen die je niet langer nodig hebt direct met imagedestroy())

EDIT3: Verder kan ik je alleen maar aanmoedigen om zaken te splitsen: maak bijv. een class voor uploads, een class voor image-manipulatie, zodat je deze zaken uit elkaar trekt.
Offline Tony_mortana - 16/01/2007 14:07 (laatste wijziging 16/01/2007 14:08)
Avatar van Tony_mortana PHP interesse Heb het script even aangepast!

Nu kan ik zien dat het uploaden goed gaat,
en waar het met resizen fout gaat!

  1. <?php
  2. if (move_uploaded_file($_FILES['bestand']['tmp_name'], $locatie_php.$destination))
  3. {
  4. while(filesize($locatie_php.$destination) > $max_size)
  5. {
  6. echo "1";
  7. $source = imagecreatefromjpeg($locatie_php.$destination);
  8. echo "2";
  9. unlink($locatie_php.$destination);
  10. echo "3";
  11. imagejpeg($source, $locatie_php.$destination, 80);
  12. echo "4";
  13. echo "<br/>foto verkleind naar:".filesize($locatie_php.$destination)."<br/>";
  14. echo "5";
  15. }
  16.  
  17.  
  18. SetData($destination, $_POST['description'], $id);
  19. echo "De foto ".$destination." is geupload<br />";
  20. }
  21. else
  22. {
  23. echo "fout bij uploaden van bestanden";
  24. }
  25. ?>

Het
bestand word gewoon op de server gegooid (8MB)
maar zodra ik weer "imagecreatefromjpeg" aanspreek loopt hij vast!
(dus ik zie "1" in beeld, en na 5 min gebeurd er nog niets   )

PS: Weet iemand of GD ook een mogelijkheid heeft om max geheugen toe te kennen, ookal kan alleen de eigenaar van de
server deze instelling veranderen!

Heb de error proberen te zoeken, maar echo toont niets omdat het
script gewoon fas loopt, en posten max is al 8MB terwijl ik met foto's van 1 MB test.

oh
set_time_limit werkte helaas ook niet  
Offline Thomas - 16/01/2007 14:20
Avatar van Thomas Moderator Wil je het origineel ook opslaan, of alleen de geresizede variant opslaan? Als je alleen het laatste wilt, kun je prima vanuit $_FILES['bestand']['tmp_name'] werken. Tijdens de uitvoering van het script blijft dit bestand bestaan. Je hoeft het bestand niet eerst te kopiëren.

Hmm... heb je error_reporting aanstaan, werk je in $locatie_php ook met $_SERVER['DOCUMENT_ROOT'] (en niet met relatieve paden enzo)?

:|
Offline Tony_mortana - 16/01/2007 14:51 (laatste wijziging 22/01/2007 20:18)
Avatar van Tony_mortana PHP interesse Oude bestand wil ik niet meer bewaren nee,
het eers copieren naar de goede locatie en dan pas aanpassen
was om te testen of het uploaden wel lukte. (doet het dus)

De paden werken allemaal perfect, kleinere foto's
gaan er namelijk simpel en snel doorheen!
(die ook geresized worden)

Heb ook snel geporbeerd bestans als string in te lezen en daarna
van string aan plaatje te maken, maar dan blijft hij daar ook hangen!

Zodra hij van GD library gebruik maakt gaat het verkeerd.
Zie op php.net zelfde problemen staan, dan met memory limits.
Dus heb die proberen te verhogen, maar denk geen rechten voor.
Dus heb ff mail gestuurd, of dat eventueel kan!

Anders weet ik het ook niet meer.

Ik denk namelijk dat hij over zijn max geheugen gebruik gaat en
daarom de server het script zelf tegenhoud.  

PS: memory limit staat nu op 32M, maar foto's gebruiken natuurlijk
een veelvoud van hun eigen waarde!

Oh error reporting staat volgens mij voor alles aan zo  
error_reporting = 2047



Heb het probleem opgelost!  

Idd moet je je Memory Limit van php instellingen verhogen!

als je foto's wilt bewerken van rond de 6 MB moet hij echt op
96MB staan!  
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.208s