PHP resize image script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ronny -

Ronny -

08/10/2012 13:30:37
Quote Anchor link
Hallo allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>";

                }
            }    
        }
?>


En de errors die ik hierbij krijg zijn de volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 ?>


Na een beetje google werk kom ik uit op het toevoegen van een header met Content-Type:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php header('Content-Type: image/jpeg'); ?>


Buiten dat dit alleen voor jpg afbeeldingen is volgens mij, werkt het ook niet want dan krijg ik de volgende error:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php Warning: Cannot modify header information - headers already sent by ?>


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 :)
 
PHP hulp

PHP hulp

24/11/2024 13:18:39
 
- SanThe -

- SanThe -

08/10/2012 13:34:08
Quote Anchor link
Deze file images/projecten/kieboom.jpg bestaat blijkbaar niet.
 
Kris Peeters

Kris Peeters

08/10/2012 13:50:24
Quote Anchor link
lijn 36:
$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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
...

?>
Gewijzigd op 08/10/2012 13:50:58 door Kris Peeters
 
Ronny -

Ronny -

08/10/2012 14:41:49
Quote Anchor link
Ten eerste wil ik jullie bedanken voor jullie reacties. Hiermee ben ik in ieder geval verder gekomen!

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
                    }
?>


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)
PHP script in nieuw venster Selecteer het PHP script
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
                }
?>
Gewijzigd op 08/10/2012 14:44:04 door Ronny -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.