wat gaat er fout met resizen?
Ik heb diverse uploadscripts gebrobeerd, zowel van deze site als van andere sites...
Het uploaden opzich gaat prima, maar dan het resizen...
ik krijg dan de foutmelding:
Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 9088 bytes) in .... enz.
scriptje?
Succes!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
$map = "upload/"; // dir waar de foto's staan
$map_large = "pic_large/"; // dir waar de grote foto's komen
$nwidth = "640"; // nieuwe breedte
$nheight = "480"; // nieuwe hoogte
$maxwidth = "8000"; // maximale breedte
$maxheight = "6000"; // maximale hoogte
$name = "pic_"; // prefix voor afbeeldingen
$handle=opendir("$map");
//uitlezen van de dir
while (false!==($naam = readdir($handle))) {
if ($naam != "." && $naam != ".." && $naam !== "Thumbs.db") {
$file = $map . $naam;
list($width, $height) = getimagesize("$file");
// controle dat niet perongeluk andere foto's ook worden gecropt
if ($width >= $maxwidth || $height >= $maxheight){
echo "<a href=$file target='blank'>Sorry <b>" . $naam .
"\n<b> is te groot " . $height ." X " . $width. "</a><br>\n
";
}else{
$i = 0;
while (file_exists($map_large . $name . $i . ".jpg")) {
$i = $i + 1;
}
$name = $name . $i;
//opnieuw aanmaken en opslaan over het orgineel heen
$pic = ImageCreateTrueColor($nwidth, $nheight);
$cpyImage = ImageCreateFromJPEG($file);
imagecopyresampled
($pic,$cpyImage,0,0,0,0, $nwidth,$nheight,$width, $height);
$nw_file = $map_large . $name . ".jpg";
imagejpeg($pic,$nw_file);
}
}
}
// en de dir weer sluiten voor de netheid
closedir($handle);
// bevestiging weergeven
//echo ("Afbeeldingen verkleind naar $nwidth x $nheight <a href=\"resize_thumb.php\"><br>Ga verder</a>");
// verwijderen van origineel
?>
$map = "upload/"; // dir waar de foto's staan
$map_large = "pic_large/"; // dir waar de grote foto's komen
$nwidth = "640"; // nieuwe breedte
$nheight = "480"; // nieuwe hoogte
$maxwidth = "8000"; // maximale breedte
$maxheight = "6000"; // maximale hoogte
$name = "pic_"; // prefix voor afbeeldingen
$handle=opendir("$map");
//uitlezen van de dir
while (false!==($naam = readdir($handle))) {
if ($naam != "." && $naam != ".." && $naam !== "Thumbs.db") {
$file = $map . $naam;
list($width, $height) = getimagesize("$file");
// controle dat niet perongeluk andere foto's ook worden gecropt
if ($width >= $maxwidth || $height >= $maxheight){
echo "<a href=$file target='blank'>Sorry <b>" . $naam .
"\n<b> is te groot " . $height ." X " . $width. "</a><br>\n
";
}else{
$i = 0;
while (file_exists($map_large . $name . $i . ".jpg")) {
$i = $i + 1;
}
$name = $name . $i;
//opnieuw aanmaken en opslaan over het orgineel heen
$pic = ImageCreateTrueColor($nwidth, $nheight);
$cpyImage = ImageCreateFromJPEG($file);
imagecopyresampled
($pic,$cpyImage,0,0,0,0, $nwidth,$nheight,$width, $height);
$nw_file = $map_large . $name . ".jpg";
imagejpeg($pic,$nw_file);
}
}
}
// en de dir weer sluiten voor de netheid
closedir($handle);
// bevestiging weergeven
//echo ("Afbeeldingen verkleind naar $nwidth x $nheight <a href=\"resize_thumb.php\"><br>Ga verder</a>");
// verwijderen van origineel
?>
Dit komt waarschijnlijk omdat er in die directory meerdere bestanden staan, die je wil resizen. Deze bestanden worden ingeladen in het geheugen door php, maar je geeft het geheugen nergens vrij. Nu wordt het geheugen pas vrij gegeven als de garbage collector langs komt en dat is pas na het uitvoeren.
Simpel gezegd, je zal het geheugen moeten gaan vrijgeven door gebruik te maken van imagedestroy().