Upload+resize image > 1,5MB
Ik heb me eens bezig gehouden met een script om afbeedlingen up te loaden en te verkleinen, met wel wat hulp van verschillende bestaande scripten... Hier is dus het belangrijkste deel van het script:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?
$newwidth='500';
$newheight='500';
$dir = "images/";
$maxsize = 2500000;
if (is_uploaded_file($_FILES['bestand']['tmp_name']))
{
if(filesize($_FILES['bestand']['tmp_name']) > $maxsize){
echo "<span style=\"color: red\">!! Foto 1 is te groot.</span><p>";
} else {
$pathinfo = pathinfo($_FILES['bestand']['name']);
$ext = strtolower($pathinfo["extension"]);
$a = ".$ext";
$naam= @foto_. date("dmyHis") .$a;
if ($ext == "jpeg" || $ext == "jpg" || $ext == "gif" || $ext == "png"){
move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$naam) or die("Onze excuses, maar het kan niet uploaden.
Waarschijnlijk is uw foto te groot.<br>
<a onclick=\"javascript:history(-1);\">Ga Terug en probeer iets anders!</A> ");
$pics=$dir.$naam;
list($width, $height) = getimagesize($pics);
if($width > $height && $newwidth < $width){
$newheight = $height / ($width / $newwidth);
} else if ($width < $height && $newheight < $height) {
$newwidth = $width / ($height / $newheight);
} else {
$newwidth = $width;
$newheight = $height;
}
if(preg_match("/.jpg/i", "$pics")){
$source = imagecreatefromjpeg($pics);
}
if(preg_match("/.jpeg/i", "$pics")){
$source = Imagecreatefromjpeg($pics);
}
if(preg_match("/.png/i", "$pics")){
$source = imagecreatefrompng($pics);
}
if(preg_match("/.gif/i", "$pics")){
$source = imagecreatefromgif($pics);
}
$thumb1 = imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($thumb1, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
if(preg_match("/.jpg/i", "$pics")){
imagejpeg($thumb1,$dir.$naam,100);
}
if(preg_match("/.jpeg/i", "$pics")){
imagejpeg($thumb1,$dir.$naam,100);
}
if(preg_match("/.png/i", "$pics")){
imagepng($thumb1,$dir.$naam,100);
}
if(preg_match("/.gif/i", "$pics")){
imagegif($thumb1,$dir.$naam,100);
}
$x=$newwidth;
$y=$newheight;
}
else {
echo "<span style=\"color: red\">Foute extensie van foto 1!! Afbeeldingen mogen enkel gif, jpg, jpeg of png zijn!</span>";
}
}
}
?>
$newwidth='500';
$newheight='500';
$dir = "images/";
$maxsize = 2500000;
if (is_uploaded_file($_FILES['bestand']['tmp_name']))
{
if(filesize($_FILES['bestand']['tmp_name']) > $maxsize){
echo "<span style=\"color: red\">!! Foto 1 is te groot.</span><p>";
} else {
$pathinfo = pathinfo($_FILES['bestand']['name']);
$ext = strtolower($pathinfo["extension"]);
$a = ".$ext";
$naam= @foto_. date("dmyHis") .$a;
if ($ext == "jpeg" || $ext == "jpg" || $ext == "gif" || $ext == "png"){
move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$naam) or die("Onze excuses, maar het kan niet uploaden.
Waarschijnlijk is uw foto te groot.<br>
<a onclick=\"javascript:history(-1);\">Ga Terug en probeer iets anders!</A> ");
$pics=$dir.$naam;
list($width, $height) = getimagesize($pics);
if($width > $height && $newwidth < $width){
$newheight = $height / ($width / $newwidth);
} else if ($width < $height && $newheight < $height) {
$newwidth = $width / ($height / $newheight);
} else {
$newwidth = $width;
$newheight = $height;
}
if(preg_match("/.jpg/i", "$pics")){
$source = imagecreatefromjpeg($pics);
}
if(preg_match("/.jpeg/i", "$pics")){
$source = Imagecreatefromjpeg($pics);
}
if(preg_match("/.png/i", "$pics")){
$source = imagecreatefrompng($pics);
}
if(preg_match("/.gif/i", "$pics")){
$source = imagecreatefromgif($pics);
}
$thumb1 = imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($thumb1, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
if(preg_match("/.jpg/i", "$pics")){
imagejpeg($thumb1,$dir.$naam,100);
}
if(preg_match("/.jpeg/i", "$pics")){
imagejpeg($thumb1,$dir.$naam,100);
}
if(preg_match("/.png/i", "$pics")){
imagepng($thumb1,$dir.$naam,100);
}
if(preg_match("/.gif/i", "$pics")){
imagegif($thumb1,$dir.$naam,100);
}
$x=$newwidth;
$y=$newheight;
}
else {
echo "<span style=\"color: red\">Foute extensie van foto 1!! Afbeeldingen mogen enkel gif, jpg, jpeg of png zijn!</span>";
}
}
}
?>
... Daarna sla ik naam en width, height op in een database, maar dat is niet zo belangrijk. Het probleem is dat het bij foto's > 1,5MB niet werkt... Ziet er iemand misschien een fout?
U kan dit script toegepast hier zien:
http://www.hermancandries.be/uwsite/foto.php
EDIT: typfoutje
Gewijzigd op 01/01/1970 01:00:00 door Sasa
Er is sowieso een maximum aan bestanden die je kunt uploaden, meestal 2 MB. Verder hebben functies als imagecopyresized (waarom gebruik je trouwens niet imagecopyresampled?) een maximum qua geheugengebruik.
Ik heb imagecopyresampled gebruikt ipv. imagecopyresized, wat inderdaad beter gaat, maar toch heb ik nog steeds het probleem dat hij niet werkt bij foto's > 2,5MB. Hoe kan dat, normaal zou ik toch een error moeten krijgen:
Weet iemand misschien hoe het komt dat ik de error niet krijg, werkt de filesize niet ofzo?
Je kunt via een .htaccess bestand apache vertellen grotere upload te accepteren. Daarnaast is, wat Jan zegt, je geheugengebruik verruimen, php converteert het namelijk naar een soort bmp bestand, dus gigantsich groot!
Maar hoe zit dat juist met dat bmp bestand? Normaal zou ik toch gewoon met "filesize > 2MB" moeten kunnen werken?
Code (php)
een image met gd vreet daarnaast geheugen...
breedte * hoogte * bitrate
ini setting memory limit moet je eventueel verhogen.
Is het de bedoeling dat hij in een map komt
of in je mailbox??
ik heb er een die upload wel en wordt doorgestuurd naam je mailbox.
Code (php)
Probeer zelf maar eens, het geeft gewoon niets van errors bij foto's > 2MB.
Het vreemde is dat ik "maxsize = 20000" (=20Kb) heb gezet, en dat de foutmelding dan nog steeds niet komt...
Heeft niemand een idee waarom ik geen foutmelding krijg bij te grote foto's? Normaal gezien zou het toch direct via filesize tot de conclusie moeten komen dat het bestand te groot is...?
OK, ik heb gevonden dat standaard ingesteld staat dat upload_max_filesize "2M" is. Kan ik er op de een of andere manier dan toch voor zorgen dat je een foutmelding krijgt bij foto's > 2MB, want nu krijg je gewoon een leeg scherm...
http://www.verot.net/php_class_upload.htm?PHPSESSID=03437857a4f0bb027a2c09cc166b6e37
Hiermee kan je alles renamen, resizen, converteren naar andere formaten, ...
Als je het toch allemaal zelf wil doen... wel, misschien kan je toch wat inspiratie opdoen bij deze class.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Dit gaat idd heel goed, ik gebruik het zelf ook.
Maar als je grotere afbeeldingen gaat gebruiken, dan kan je tegen problemen botsen ( onder andere met host one.com )
Het geheugenverbruik is te groot voor dit script