Avatar billede rzj Nybegynder
28. oktober 2003 - 12:55 Der er 13 kommentarer

problem resize af store filer

hej
jeg har har godt forstand på resize af billeder (skulle jeg mene). Men nu har jeg "pludseligt" fået dette problem:

Fatal error: Allowed memory size of 8388608 bytes exhausted at (null):0 (tried to allocate 8188 bytes) in /net/users/a37/699/basewebdk/www/cms/createForms.php on line 280

resize script ser sådan ud:
function reSizeImage($imageDir, $imageName, $renamedImage, $maxWidth, $maxHeight, $quality){

list($width,$height,$type)= getimagesize($imageDir.$imageName);
       
//Set correct dimensions for new image
$ratioHeight = $maxHeight/$height;
$ratioWidth = $maxWidth/$width;
$ratio = min($ratioWidth, $ratioHeight);
$newWidth = $width * $ratio;
$newHeight = $height * $ratio;

//Create thumb dependent of image type
//Currently only *.JPG is supported
list($filename, $ext) = explode(".", $imageDir.$imageName);
if($ext == "jpg"){
    //Create a image in buffer from source image
    $src_img = imagecreatefromjpeg($imageDir.$imageName);
           
    //Create destination image in buffer with correct dimensions
    $dst_img = imagecreatetruecolor($newWidth,$newHeight); //linie 280
           
    //Copy the image from source to destination
    imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    imagejpeg($dst_img, $imageDir.$renamedImage, $quality);
       
    //Destroy the buffers
    imagedestroy($src_img);
    imagedestroy($dst_img);
       
}else{
  echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>';
    error("Forkert filtype. Det er kun muligt at uploade billeder af filtypen *.jpg");
}
       
return true;       
}

er der nogen der lige sidder med svaret eller kender et resize script, der bare VIRKER ?
Avatar billede rzj Nybegynder
28. oktober 2003 - 12:56 #1
vrøvl linie 280 er denne linie: $src_img = imagecreatefromjpeg($imageDir.$imageName);
Avatar billede razor Nybegynder
28. oktober 2003 - 13:19 #2
Forstår du fejlbeskeden?
Avatar billede Slettet bruger
28. oktober 2003 - 13:25 #3
Et gæt er at billedet enten er over 8 MB stort eller at det er højere/bredere edn 1200/1600 pixels
Avatar billede tipsen Nybegynder
28. oktober 2003 - 13:32 #4
Check your php.ini for max memory allocated for your scripts. You can
control this through the ini-file.

Check the following lines in your php.ini file:

<snip>
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 8000 ; Maximum execution time of each script, in
seconds
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
</snip>
Avatar billede rzj Nybegynder
28. oktober 2003 - 13:39 #5
razor> jo jeg forstår godt noget af det. max_memory size er sat til 8M og der resizes skal der åbenbart allokeres mere hukommelse end de 8M.

el_barto> helt korrekt billedet er IKKE over 8MB (det er omkring 0,6 MB). Tilgengæld ER billedet 1535 / 2027 pixels. Hvad har det af betydning ?

tipsen> 8M memory burde være nok ;-)

Til alle> Det er jo ikke ved upload proceduren det går galt. Det er når billedet skal skaleres ?
/raz
Avatar billede Slettet bruger
28. oktober 2003 - 13:44 #6
Problemet (tror jeg) er at GDLib arbejder med billedet uden kompression, og du kan selv prøve at oprette et billede i Photoshop der er 1535 x 2027 det fylder 8.9 MB i hukommelsen. Uanset om der er fyldt noget i det.

Prøv at sætte din memory limit op til f.eks. 16
Avatar billede rzj Nybegynder
28. oktober 2003 - 14:13 #7
el_barto> Det interessante er at jeg laver to resize, først kalder jeg resize funktionen og sætter billedet ned til 510 / 369 px.  Det går fint.
Dernæst kalder jeg resize funktionen igen og vil nu gerne sætte det ned til 150 / 100 og her går det galt.

Jeg kan ikke sætte memory limit op, da jeg ikke styrer php.ini
Avatar billede tipsen Nybegynder
28. oktober 2003 - 14:23 #8
Fra: http://dk.php.net/manual/en/function.ini-set.php

memory_limit "8M" PHP_INI_ALL

dvs:

ini_set('memory_limit', '16M');
Avatar billede rzj Nybegynder
28. oktober 2003 - 14:32 #9
jeg kan ikke bruge ini_set
php kører i safe mode
Avatar billede tipsen Nybegynder
28. oktober 2003 - 14:34 #10
rzj: 8M hukommelse er tilsyneladende ikke nok... ;-)

-er du forøvrigt sikker på at du har held med at resize første gang - det synes jeg lyder mærkeligt...
Avatar billede tipsen Nybegynder
28. oktober 2003 - 14:34 #11
rzj: Er vi heldige, at PHP også kører som cgi?
Avatar billede rzj Nybegynder
28. oktober 2003 - 14:40 #12
tipsen> ja, det har jeg held med
tipsen> jeg ved ikke med cgi?
Avatar billede rzj Nybegynder
28. oktober 2003 - 20:37 #13
jamen I havde da ret omkring at der ikke kunne allokeres nok hukommelse. Efter at have prøvet at klare problemet ved diverse ændringer i koden fik jeg endda mistanke til at el_barto havde ret omkring at GD Lib arbejder med billedet uden kompression og eftersom et jpeg billede der skal overholde standarden for presse billeder (
kvalitet 8/9
300 ppi
13x18 cm
)
ganske rigtigt er på omkring de 8 MB ukomprimeret sååååå.

Og hvad endte så alt dette ud med. Det endte ud med at jeg fandt en måde (endda lovlig) at omgå memory_limit på. Nemlig er jeg så heldig at afvikle web på en Apache og her har man jo den dejlige .htaccess at arbejde med. Derfor smider man dette i en .htaccess i det bib, der indeholder scriptet med resize-funktionen:

php_value memory_limit 30M

herved sætter man lige memory op med 22 MB. Jeg har ingen ide om hvor meget det er nødvendigt at sætte limit til og jeg har heller ingen ide om hvad det har af andre bivirkninger. Så hvis der er nogen her der er stærke i Memory allokering under scripts afviklet på Apache så si' endeligt til,..... ;-)

/raz
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester