Resize & upload zonder vervorming
Nu, het script wat ik tracht te maken is als volgt:
je hebt een bestand upload.php waarvan het eerste gedeelte zorgt voor het uploaden en het checken van extensie. Het tweede gedeelte haalt dan de image uit de uploads folder (waar de file is ge-upload...), resized deze foto in het 1280x800 formaat, en slaat deze op in de uploads/wxga folder. Althans, dat is wat het script ZOU moeten doen. de scritps werken afzonderlijk perfect, maar als ik ze samenvoeg krijg ik volgende error:
Parse error: parse error, unexpected T_VARIABLE in /home/user/kristof.jacobs/www/upload/upload.php on line 58
Iemand enig idee wat er fout gaat? Mijn php kennis is zeer beperkt, maar we leren bij :-)
Hieronder 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?
//In het bovenste gedeelte wordt de file ge-upload
global $_FILES;
$filename = $_FILES['userfile']['name'];
$allow[0] = "jpg";
$allow[1] = "gif";
$allow[2] = "bmp";
$allow[3] = "JPG";
$allow[4] = "JPEG";
$allow[5] = "jpeg";
if ($_POST["newname"])
$uploadname = $_POST['newname'];
else
$uploadname = $_FILES['userfile']['name'];
$extentie = substr($uploadname, -3);
for ($i = 0; $i < count($allow); $i++)
{
if ($extentie == $allow[$i])
{
$extentie_check = "ok";
$i = count($allow) + 7; // om loop te beindigen
}
}
if ($extentie_check)
{
if($_FILES['userfile']['size'] > 999999999) {
echo "Het bestand is te groot!";
} else {
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
move_uploaded_file($_FILES['userfile']['tmp_name'], "uploads/" . $uploadname);
echo "Het bestand is geupload onder de naam: $uploadname";
}
}
}
else
{
echo "De extensie wordt niet toegelaten op deze server!";
}
//Het gedeelte hieronder resized de picture die ge-upload werd.
error_reporting(E_ALL);
// $breedte is nieuwe breedte
// $hoogte is nieuwe hoogte
// $imgFILE waar het plaatje van gemaakt wordt, het orgineel dus (bijv $_FILES['image']['tmp_name'])
// $imgDIR waar het plaatje naartoe verhuisd als ie gemaakt is
// $imgNAME nieuwe naam voor plaatje (bijv. mysql_insert_id () )
// $imgEXTENSION jpg of voor thumbs _th.jpg etc.
// $quality getal tussen de 0 en 100 waarbij 100 beste kwaliteit is
$breedte = '1280';
$hoogte = '800';
$imgFILE = 'uploads/'$uploadname;
$imgDIR = 'wxga/';
$imgNAME = $uploadname;
$imgEXTENSION = '.jpg';
$quality = '100';
function create_new_JPGimage ($breedte, $hoogte, $imgFILE, $imgDIR, $imgNAME, $imgEXTENSION, $quality)
{
//temp_photo voor thumbnail maken
$photo = imagecreatefromjpeg ($imgFILE);
//afmetingen bepalen
$source_x = imagesx($photo);
$source_y = imagesy($photo);
$target_x = $breedte;
$target_y = $hoogte;
//als foto te hoog is
if (($source_x/$target_x) < ($source_y/$target_y))
{
//echo "te hoog";
$from_y = ceil(($source_y - ($target_y * $source_x / $target_x))/2);
$from_x = '0';
$source_used_y = ceil(($target_y * $source_x / $target_x));
$source_used_x = $source_x;
}
//als foto te breed is
if (($source_y/$target_y) < ($source_x/$target_x))
{
//echo "te breed";
$from_x = ceil(($source_x - ($target_x * $source_y / $target_y))/2);
$from_y = '0';
$source_used_x = ceil(($target_x * $source_y / $target_y));
$source_used_y = $source_y;
}
//als verhoudingen gelijk zijn
if (($source_x/$target_x) == ($source_y/$target_y))
{
$from_x = '0';
$from_y = '0';
$source_used_x = $source_x;
$source_used_y = $source_y;
}
//nieuwe image maken en wegschrijven naar dir
$create_blank = imagecreatetruecolor ($target_x, $target_y);
imagecopyresampled ($create_blank, $photo, 0, 0, $from_x, $from_y, $target_x, $target_y, $source_used_x, $source_used_y);
$new_filename = $imgDIR.$imgNAME.$imgEXTENSION;
ImageJpeg($create_blank,$new_filename,$quality);
Imagedestroy($photo);
}
create_new_JPGimage ($breedte, $hoogte, $imgFILE, $imgDIR, $imgNAME, $imgEXTENSION, $quality);
?>
//In het bovenste gedeelte wordt de file ge-upload
global $_FILES;
$filename = $_FILES['userfile']['name'];
$allow[0] = "jpg";
$allow[1] = "gif";
$allow[2] = "bmp";
$allow[3] = "JPG";
$allow[4] = "JPEG";
$allow[5] = "jpeg";
if ($_POST["newname"])
$uploadname = $_POST['newname'];
else
$uploadname = $_FILES['userfile']['name'];
$extentie = substr($uploadname, -3);
for ($i = 0; $i < count($allow); $i++)
{
if ($extentie == $allow[$i])
{
$extentie_check = "ok";
$i = count($allow) + 7; // om loop te beindigen
}
}
if ($extentie_check)
{
if($_FILES['userfile']['size'] > 999999999) {
echo "Het bestand is te groot!";
} else {
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
move_uploaded_file($_FILES['userfile']['tmp_name'], "uploads/" . $uploadname);
echo "Het bestand is geupload onder de naam: $uploadname";
}
}
}
else
{
echo "De extensie wordt niet toegelaten op deze server!";
}
//Het gedeelte hieronder resized de picture die ge-upload werd.
error_reporting(E_ALL);
// $breedte is nieuwe breedte
// $hoogte is nieuwe hoogte
// $imgFILE waar het plaatje van gemaakt wordt, het orgineel dus (bijv $_FILES['image']['tmp_name'])
// $imgDIR waar het plaatje naartoe verhuisd als ie gemaakt is
// $imgNAME nieuwe naam voor plaatje (bijv. mysql_insert_id () )
// $imgEXTENSION jpg of voor thumbs _th.jpg etc.
// $quality getal tussen de 0 en 100 waarbij 100 beste kwaliteit is
$breedte = '1280';
$hoogte = '800';
$imgFILE = 'uploads/'$uploadname;
$imgDIR = 'wxga/';
$imgNAME = $uploadname;
$imgEXTENSION = '.jpg';
$quality = '100';
function create_new_JPGimage ($breedte, $hoogte, $imgFILE, $imgDIR, $imgNAME, $imgEXTENSION, $quality)
{
//temp_photo voor thumbnail maken
$photo = imagecreatefromjpeg ($imgFILE);
//afmetingen bepalen
$source_x = imagesx($photo);
$source_y = imagesy($photo);
$target_x = $breedte;
$target_y = $hoogte;
//als foto te hoog is
if (($source_x/$target_x) < ($source_y/$target_y))
{
//echo "te hoog";
$from_y = ceil(($source_y - ($target_y * $source_x / $target_x))/2);
$from_x = '0';
$source_used_y = ceil(($target_y * $source_x / $target_x));
$source_used_x = $source_x;
}
//als foto te breed is
if (($source_y/$target_y) < ($source_x/$target_x))
{
//echo "te breed";
$from_x = ceil(($source_x - ($target_x * $source_y / $target_y))/2);
$from_y = '0';
$source_used_x = ceil(($target_x * $source_y / $target_y));
$source_used_y = $source_y;
}
//als verhoudingen gelijk zijn
if (($source_x/$target_x) == ($source_y/$target_y))
{
$from_x = '0';
$from_y = '0';
$source_used_x = $source_x;
$source_used_y = $source_y;
}
//nieuwe image maken en wegschrijven naar dir
$create_blank = imagecreatetruecolor ($target_x, $target_y);
imagecopyresampled ($create_blank, $photo, 0, 0, $from_x, $from_y, $target_x, $target_y, $source_used_x, $source_used_y);
$new_filename = $imgDIR.$imgNAME.$imgEXTENSION;
ImageJpeg($create_blank,$new_filename,$quality);
Imagedestroy($photo);
}
create_new_JPGimage ($breedte, $hoogte, $imgFILE, $imgDIR, $imgNAME, $imgEXTENSION, $quality);
?>
niemand een idee?
Zoek ik op image resize!
ik heb nog een resize functie op breedte die kan je wel gebruiken hoor. deze vervormt ook niet...
ja, mag je altijd eens posten hier. Kan ik het eens bekijken. Probleem is dat bovenstaand resize script perfect werkt, maar dat ik de upload combinatie niet eraan krijg gekoppeld.
$imgFILE = 'uploads/'$uploadname;
Verander dit in:
$imgFILE = 'uploads/' . $uploadname;
Dan werkt je script perfekt (ik gebruik hem ook!)
Michael
Dat hoeft helemaal niet. Superglobals zijn standaard altijd al global.
En zet error_reporting(E_ALL); maar op die plaats, dan krijg je ook daadwerkelijk alle errors te zien.
Code (php)
Die for-loop kan makkelijker met in_array().
Misschien heb je wat aan mijn Bugreport ^^,