PHP resize image script
Voor een website ben ik bezig met een script om een afbeelding die ik upload te resizen.
Ik ben hier al een aardig poosje mee bezig maar loop er telkens op vast.
De code die ik nu heb is al volgt:
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
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
<?php
$errors = array( );
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
echo "<form action='admin.php' method='post' enctype='multipart/form-data' />
<p><input type='file' name='foto' value='' size='30' /></p>
<p><label>Korte beschrijving:</label><br>
<input type='text' name='alt' class='field' value='' /></p>
<p><label>Project naam:</label><br>
<input type='text' name='project' class='field' value='' /></p>
<input type='hidden' name='formtype' value='uploadfile' />
<p><input type='submit' name='submit_top' class='uploaden' value='Uploaden' /></p>
</form>";
$UploadMap = 'images/projecten/';
$FotoNaam = '';
$MaxFotoSize = 5000000;
$FotoExt = array('.jpg', '.jpeg', '.gif', '.png');
$FotoMIME = array ('image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png', 'image/gif');
if (isset($_POST['submit_top']) && isset($_POST['formtype'])) {
if (!isset($_FILES['foto']['name'])) {
echo "<p class='error'>Geen foto geselecteerd.. <span class='close'>X</span></p>";
} elseif (empty($_POST['alt'])) {
echo "<p class='error'>Er moet een beschrijving ingevuld worden! <span class='close'>X</span></p>";
} elseif (empty($_POST['project'])) {
echo "<p class='error'>Er moet een project naam ingevuld worden! <span class='close'>X</span></p>";
} else {
$Foto = $_FILES['foto']['name'];
$FotoNaam = $UploadMap . $_FILES['foto']['name'];
if (file_exists($FotoNaam)) {
echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";
} else {
$width = 466;
$height = 140;
list($width_orig, $height_orig) = getimagesize($FotoNaam);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($FotoNaam);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $FotoNaam, 100);
$alt = empty($_POST['alt']) ? die ("") : mysql_real_escape_string($_POST['alt']);
$project = empty($_POST['project']) ? die ("") : mysql_real_escape_string($_POST['project']);
$p_query = "INSERT INTO top (src, title, alt) VALUES ('$FotoNaam', '$project', '$alt')";
$p_result = mysql_query($p_query) or die ("<p class='error'>Error in query: $p_query.<span class='close'>X</span></p>".mysql_error());
echo "<p class='update'>De gekozen foto is geupload en toegevoegd aan de website! <span class='close'>X</span></p>";
}
}
}?>
$errors = array( );
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
echo "<form action='admin.php' method='post' enctype='multipart/form-data' />
<p><input type='file' name='foto' value='' size='30' /></p>
<p><label>Korte beschrijving:</label><br>
<input type='text' name='alt' class='field' value='' /></p>
<p><label>Project naam:</label><br>
<input type='text' name='project' class='field' value='' /></p>
<input type='hidden' name='formtype' value='uploadfile' />
<p><input type='submit' name='submit_top' class='uploaden' value='Uploaden' /></p>
</form>";
$UploadMap = 'images/projecten/';
$FotoNaam = '';
$MaxFotoSize = 5000000;
$FotoExt = array('.jpg', '.jpeg', '.gif', '.png');
$FotoMIME = array ('image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png', 'image/gif');
if (isset($_POST['submit_top']) && isset($_POST['formtype'])) {
if (!isset($_FILES['foto']['name'])) {
echo "<p class='error'>Geen foto geselecteerd.. <span class='close'>X</span></p>";
} elseif (empty($_POST['alt'])) {
echo "<p class='error'>Er moet een beschrijving ingevuld worden! <span class='close'>X</span></p>";
} elseif (empty($_POST['project'])) {
echo "<p class='error'>Er moet een project naam ingevuld worden! <span class='close'>X</span></p>";
} else {
$Foto = $_FILES['foto']['name'];
$FotoNaam = $UploadMap . $_FILES['foto']['name'];
if (file_exists($FotoNaam)) {
echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";
} else {
$width = 466;
$height = 140;
list($width_orig, $height_orig) = getimagesize($FotoNaam);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($FotoNaam);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $FotoNaam, 100);
$alt = empty($_POST['alt']) ? die ("") : mysql_real_escape_string($_POST['alt']);
$project = empty($_POST['project']) ? die ("") : mysql_real_escape_string($_POST['project']);
$p_query = "INSERT INTO top (src, title, alt) VALUES ('$FotoNaam', '$project', '$alt')";
$p_result = mysql_query($p_query) or die ("<p class='error'>Error in query: $p_query.<span class='close'>X</span></p>".mysql_error());
echo "<p class='update'>De gekozen foto is geupload en toegevoegd aan de website! <span class='close'>X</span></p>";
}
}
}?>
En de errors die ik hierbij krijg zijn de volgende:
Code (php)
1
2
3
2
3
<?php Warning: getimagesize() [function.getimagesize]: Unable to access images/projecten/kieboom.jpg in *link* on line 307
Warning: getimagesize(images/projecten/kieboom.jpg) [function.getimagesize]: failed to open stream: No such file or directory in *link* on line 307 ?>
Warning: getimagesize(images/projecten/kieboom.jpg) [function.getimagesize]: failed to open stream: No such file or directory in *link* on line 307 ?>
Na een beetje google werk kom ik uit op het toevoegen van een header met Content-Type:
Buiten dat dit alleen voor jpg afbeeldingen is volgens mij, werkt het ook niet want dan krijg ik de volgende error:
Korte samenvatting is dat ik daar de bomen en de fouten die ik telkens krijg het bos niet meer zie en ik vast loop.
Zou erg dankbaar zijn als iemand me kan verder helpen hier!
Ronny :)
Deze file images/projecten/kieboom.jpg bestaat blijkbaar niet.
$FotoNaam = $UploadMap . $_FILES['foto']['name'];
lijn 44:
list($width_orig, $height_orig) = getimagesize($FotoNaam);
Het is zoals je zelf zegt: $FotoNaam is de naam (nu ja, het pad) die de foto moet krijgen.
Maar je moet de foto dan wel effectief op die plaats zetten, he. Dat ben je vergeten.
Kijk bv. hier eens:
http://www.w3schools.com/php/php_file_upload.asp
Je moet iets doen zoals:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
...
if (file_exists($FotoNaam)) {
echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";
} else {
move_uploaded_file($_FILES["foto"]["tmp_name"], $FotoNaam);
...
?>
...
if (file_exists($FotoNaam)) {
echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";
} else {
move_uploaded_file($_FILES["foto"]["tmp_name"], $FotoNaam);
...
?>
Gewijzigd op 08/10/2012 13:50:58 door Kris Peeters
Ten tweede ben ik er natuurlijk mee aan de slag gegaan, het volgende het ik gedaan.
Eerst probeerde had ik de move_uploaded_file in een if gezet op deze manier:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
if (move_uploaded_file($_FILES["foto"]["tmp_name"], $FotoNaam)) {
$alt = empty($_POST['alt']) ? die ("") : mysql_real_escape_string($_POST['alt']);
$project = empty($_POST['project']) ? die ("") : mysql_real_escape_string($_POST['project']);
$p_query = "INSERT INTO top (src, title, alt) VALUES ('$FotoNaam', '$project', '$alt')";
$p_result = mysql_query($p_query) or die ("<p class='error'>Error in query: $p_query.<span class='close'>X</span></p>".mysql_error());
echo "<p class='update'>De gekozen foto is geupload en toegevoegd aan de website! <span class='close'>X</span></p>";
}?>
if (move_uploaded_file($_FILES["foto"]["tmp_name"], $FotoNaam)) {
$alt = empty($_POST['alt']) ? die ("") : mysql_real_escape_string($_POST['alt']);
$project = empty($_POST['project']) ? die ("") : mysql_real_escape_string($_POST['project']);
$p_query = "INSERT INTO top (src, title, alt) VALUES ('$FotoNaam', '$project', '$alt')";
$p_result = mysql_query($p_query) or die ("<p class='error'>Error in query: $p_query.<span class='close'>X</span></p>".mysql_error());
echo "<p class='update'>De gekozen foto is geupload en toegevoegd aan de website! <span class='close'>X</span></p>";
}?>
Echter kreeg ik hiermee nog steeds dezelfde foutmeldingen.
Toen had ik het gedaan zoals in de post hierboven van Kris namelijk de move_uploaded_file helemaal bovenaan in de else en daaronder de resize functie.
Alle errors verdwenen en de afbeelding werd netjes geüpload, echter kreeg ik werd de afbeelding net geresized.
Daarna had ik de move_uploaded_file tussen de resize functie en de insert query ingezet. Dit resulteerde weer in dezelfde errors als die ik eerder kreeg.
Kortom doe ik het dus blijkbaar nog verkeerd en snap ik nog steeds de 'echte' fout niet :(
Mocht iemand nog ideeën hebben hoor ik het graag!
EDIT:
Als de move_uploaded_file tussen het resize script en de query in staat komt de volgende error er nog bij:
Code (php)
1
<?php Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to access in /public/sites/www.vanenkbouw.nl/jrwd_admin.php on line 323 ?>
Toevoeging op 08/10/2012 15:13:35:
Thanks voor jullie reacties ik heb het nu als volgt werkend gekregen:
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
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
<?php $Foto = $_FILES['foto']['name'];
$FotoNaam = $UploadMap . $_FILES['foto']['name'];
if (file_exists($FotoNaam)) {
echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";
} else {
if(move_uploaded_file($_FILES["foto"]["tmp_name"], $FotoNaam)) {
$width = 900;
$height = 500;
list($width_orig, $height_orig) = getimagesize($FotoNaam);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($FotoNaam);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $FotoNaam, 100);
} ?>
$FotoNaam = $UploadMap . $_FILES['foto']['name'];
if (file_exists($FotoNaam)) {
echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";
} else {
if(move_uploaded_file($_FILES["foto"]["tmp_name"], $FotoNaam)) {
$width = 900;
$height = 500;
list($width_orig, $height_orig) = getimagesize($FotoNaam);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($FotoNaam);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $FotoNaam, 100);
} ?>
Gewijzigd op 08/10/2012 14:44:04 door Ronny -