Antworten auf deine Fragen:
Neues Thema erstellen

thumbnail erstellen.

puur

Nicht mehr ganz neu hier

Hi,
hab da mal wieder ein Problem undzwar möchte ich ein Thumb durch PHP erstellen lassen. Das klappt auch wenn ich es mit einem Bild mache, nun wollte ich aber mal probieren das ganze mit mehr als nur einem Bild zu mache. Aber iwie klappt da nix hab die Vermutung, das es iwie an $_FILES['fupload']['name']; liegt weiß aber nicht genau ich geb euch mal den CODE:

Index.php
Code:
<?php
 session_start();
	
	require 'functions.php';
	
    if(isset($_FILES['fupload'])) {
        
       
    	$_SESSION['groesse']         = $_POST['groesse'];
		
        $path_to_image_directory     = 'images/full/';
        $path_to_thumbs_directory     = 'images/thumbs/';
        
        
        if(preg_match('/\.(jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])) {
            
            $filename         = $_FILES['fupload']['name'];
            $source            = $_FILES['fupload']['tmp_name'];
            $target            = $path_to_image_directory . $filename;
            
            move_uploaded_file($source, $target);
            
			createThumbnail($filename);
			

        } else {
            echo 'Bitte nur Bilder im Format: *.jpg, *.png, *.gif';
        }
        
    }

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
       
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="css/default.css" />
        <link rel="stylesheet" href="css/reset.css" />
        <script type="text/javascript" src="script.js"></script>        
        <title>Untitled Document</title>
    </head>
    <body>
        <div id="container">

            <?php if(!isset($_POST['anzahl'])) { ?>

            <form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
                
                <label>Wieviele Thumbs mchtest du erstellen ?</label><br />
                <input type="text" name="anzahl" />
                <input type="submit" value="o.k" />
                
            </form>

            <?php } if(isset($_POST['anzahl'])) { ?>

            <form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
                
                <label for="groesse">Breite der Thumbs ?</label><br />
                <input type="text" name="groesse" id="groesse" /><br />
                <br /><br />
                <label for="t1">Bilder hochladen</label><br />
                
                <?php 
                    
                    for($i = 0; $i < $_POST['anzahl']; $i++) {
                        echo '<input type="file" name="fupload" /><br />';
                    }
                    
                ?>
                
                <br />
                <input type="submit" value="Go!" />
            </form>
            
            <?php } ?>
            
        </div>
    </body>
</html>

FUNCTIONS.php
Code:
<?php
    
    function createThumbnail($filename) {
		
		$final_width_of_image         = $_SESSION['groesse'];
		
        $path_to_image_directory     = 'images/full/';
        $path_to_thumbs_directory     = 'images/thumbs/';
        
        
        if(preg_match('/[.]jpg$/', $filename)) {
            $im = imagecreatefromjpeg($path_to_image_directory . $filename);
        } else if(preg_match('/[.]gif$/', $filename)) {
            $im = imagecreatefromgif($path_to_image_directory . $filename);
        } else if(preg_match('/[.]png$/', $filename)) {
            $im = imagecreatefrompng($path_to_image_directory . $filename);
        }
            
        
        $ox    = imagesx($im);
        $oy = imagesy($im);
            
        $nx = $final_width_of_image;
        $ny = floor($oy * ($nx / $ox)); 
            
        $nm = imagecreatetruecolor($nx, $ny);
            
        imagecopyresized($nm, $im, 0, 0, 0, 0, $nx, $ny, $ox, $oy);
            
        if(!file_exists($path_to_thumbs_directory)) {
            if(mkdir($path_to_thumbs_directory)) {
                    
                imagejpeg($nm, $path_to_thumbs_directory . $filename);
                    
                $tn = '<a href="'. $path_to_image_directory . $filename .'"><img style="border: 0;" src="'. $path_to_thumbs_directory . $filename .'" alt="'. $filename .'" /></a>';
                $tn .= '<br />Congrats! Your folder has been successfuly created.';
                    
                echo $tn;
            }

        } else {
                
            imagejpeg($nm, $path_to_thumbs_directory . $filename);
                
            $tn = '<a href="'. $path_to_image_directory . $filename .'"><img style="border: 0;" src="'. $path_to_thumbs_directory . $filename .'" alt="'. $filename .'" /></a>';
            $tn .= '<br />Congrats! Your image has been successfuly created.';
            
            echo $tn;            
        }
    }
?>
 
Zuletzt bearbeitet:

r3nt5ch3r

~ Allround pG ~

AW: thumbnail erstellen.

echo '<input type="file" name="fupload'.$i.'" /><br />';
vs.
if(isset($_FILES['fupload'])) {

soll heißen: name ist fupload0, fupload1 usw du checkst aber nur fupload -> gibt es natürlich nicht...

2. require 'index.php'; <- weg machen in in der Funktion "createThumbnail"
3. $path_to_image_directory <- gibts nicht in der Funktion "createThumbnail"
4. keine Lust mehr weiter zu schauen. Lern php dann nerv uns wieder, Danke!

ok weil ich "nett" bin hab ichs mal LAUFFÄHIG (das heißt alles andere als richtig und gut) gemacht:

PHP:
<?php
 session_start();

    if(isset($_FILES['fupload0'])) {
        
        $final_width_of_image         = $_POST['groesse'];
    
        $path_to_image_directory     = 'images/full/';
        $path_to_thumbs_directory     = 'images/thumbs/';
        
        require 'functions.php';
        
        if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['fupload0']['name'])) {
            
            $filename         = $_FILES['fupload0']['name'];
            $source            = $_FILES['fupload0']['tmp_name'];
            $target            = $path_to_image_directory . $filename;
            
            move_uploaded_file($source, $target);
            
            createThumbnail($filename);
        } else {
            echo 'Bitte nur Bilder im Format: *.jpg, *.png, *.gif';
        }
        
    }

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
       
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="css/default.css" />
        <link rel="stylesheet" href="css/reset.css" />
        <script type="text/javascript" src="script.js"></script>        
        <title>Untitled Document</title>
    </head>
    <body>
        <div id="container">

            <?php if(!isset($_POST['anzahl'])) { ?>

            <form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
                
                <label>Wieviele Thumbs mchtest du erstellen ?</label><br />
                <input type="text" name="anzahl" />
                <input type="submit" value="o.k" />
                
            </form>

            <?php } if(isset($_POST['anzahl'])) { ?>

            <form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
                
                <label for="groesse">Breite der Thumbs ?</label><br />
                <input type="text" name="groesse" id="groesse" /><br />
                <br /><br />
                <label for="t1">Bilder hochladen</label><br />
                
                <?php 
                    
                    for($i = 0; $i < $_POST['anzahl']; $i++) {
                        echo '<input type="file" name="fupload'.$i.'" /><br />';
                    }
                    
                ?>
                
                <br />
                <input type="submit" value="Go!" />
            </form>
            
            <?php } ?>
            
        </div>
    </body>
</html>
PHP:
<?php
    
    function createThumbnail($filename) {
        
        $path_to_image_directory     = 'images/full/';
        $path_to_thumbs_directory     = 'images/thumbs/';
        
        
        if(preg_match('/[.]jpg$/', $filename)) {
            $im = imagecreatefromjpeg($path_to_image_directory . $filename);
        } else if(preg_match('/[.]gif$/', $filename)) {
            $im = imagecreatefromgif($path_to_image_directory . $filename);
        } else if(preg_match('/[.]png$/', $filename)) {
            $im = imagecreatefrompng($path_to_image_directory . $filename);
        }
            
        
        $ox    = imagesx($im);
        $oy = imagesy($im);
            
        $nx = $_POST['groesse'];
        $ny = floor($oy * ($nx / $ox)); 
            
        $nm = imagecreatetruecolor($nx, $ny);
            
        imagecopyresized($nm, $im, 0, 0, 0, 0, $nx, $ny, $ox, $oy);
            
        if(!file_exists($path_to_thumbs_directory)) {
            if(mkdir($path_to_thumbs_directory)) {
                    
                imagejpeg($nm, $path_to_thumbs_directory . $filename);
                    
                $tn = '<a href="'. $path_to_image_directory . $filename .'"><img style="border: 0;" src="'. $path_to_thumbs_directory . $filename .'" alt="'. $filename .'" /></a>';
                $tn .= '<br />Congrats! Your folder has been successfuly created.';
                    
                echo $tn;
            }

        } else {
                
            imagejpeg($nm, $path_to_thumbs_directory . $filename);
                
            $tn = '<a href="'. $path_to_image_directory . $filename .'"><img style="border: 0;" src="'. $path_to_thumbs_directory . $filename .'" alt="'. $filename .'" /></a>';
            $tn .= '<br />Congrats! Your folder has been successfuly created.';
            
            echo $tn;            
        }
    }
?>
Noch ein paar Erklärungen:
- $final_width_of_image, $path_to_image_directory, $path_to_thumbs_directory gibts nicht in der Funktion!
- require 'index.php'; -> unnötig (evtl Endlosschleife beim requiren^^)
- $_FILES['fupload'] ->$_FILES['fupload0'] -> damit sprech ich nur das 1. Bild an, dass übergeben wurde (du musst das natürlich noch anpassen an alle Bilder)

(frag mich auch wie das mit einem Bild auch nur annähernd gehen konnte xD)
 
Zuletzt bearbeitet:

puur

Nicht mehr ganz neu hier

AW: thumbnail erstellen.

wow... auf sone arrogante art kann ich verzichten! bin gerade dabei zu lernen..

*edit* das ganze funktioniert immernoch nur mit einem Bild. Meine Frage war aber wie ich es hinbekomme es für mehrer Bilder zum laufen zu kriegen.

Index.php
Code:
<?php
 session_start();
	
	require 'functions.php';
	
    if(isset($_FILES['fupload'])) {
        
       
    	$_SESSION['groesse']         = $_POST['groesse'];
		
        $path_to_image_directory     = 'images/full/';
        $path_to_thumbs_directory     = 'images/thumbs/';
        
        
        if(preg_match('/\.(jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])) {
            
            $filename         = $_FILES['fupload']['name'];
            $source            = $_FILES['fupload']['tmp_name'];
            $target            = $path_to_image_directory . $filename;
            
            move_uploaded_file($source, $target);
            
			createThumbnail($filename);
			

        } else {
            echo 'Bitte nur Bilder im Format: *.jpg, *.png, *.gif';
        }
        
    }

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
       
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="css/default.css" />
        <link rel="stylesheet" href="css/reset.css" />
        <script type="text/javascript" src="script.js"></script>        
        <title>Untitled Document</title>
    </head>
    <body>
        <div id="container">

            <?php if(!isset($_POST['anzahl'])) { ?>

            <form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
                
                <label>Wieviele Thumbs mchtest du erstellen ?</label><br />
                <input type="text" name="anzahl" />
                <input type="submit" value="o.k" />
                
            </form>

            <?php } if(isset($_POST['anzahl'])) { ?>

            <form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
                
                <label for="groesse">Breite der Thumbs ?</label><br />
                <input type="text" name="groesse" id="groesse" /><br />
                <br /><br />
                <label for="t1">Bilder hochladen</label><br />
                
                <?php 
                    
                    for($i = 0; $i < $_POST['anzahl']; $i++) {
                        echo '<input type="file" name="fupload" /><br />';
                    }
                    
                ?>
                
                <br />
                <input type="submit" value="Go!" />
            </form>
            
            <?php } ?>
            
        </div>
    </body>
</html>

FUNCTIONS.php
Code:
<?php
    
    function createThumbnail($filename) {
		
		$final_width_of_image         = $_SESSION['groesse'];
		
        $path_to_image_directory     = 'images/full/';
        $path_to_thumbs_directory     = 'images/thumbs/';
        
        
        if(preg_match('/[.]jpg$/', $filename)) {
            $im = imagecreatefromjpeg($path_to_image_directory . $filename);
        } else if(preg_match('/[.]gif$/', $filename)) {
            $im = imagecreatefromgif($path_to_image_directory . $filename);
        } else if(preg_match('/[.]png$/', $filename)) {
            $im = imagecreatefrompng($path_to_image_directory . $filename);
        }
            
        
        $ox    = imagesx($im);
        $oy = imagesy($im);
            
        $nx = $final_width_of_image;
        $ny = floor($oy * ($nx / $ox)); 
            
        $nm = imagecreatetruecolor($nx, $ny);
            
        imagecopyresized($nm, $im, 0, 0, 0, 0, $nx, $ny, $ox, $oy);
            
        if(!file_exists($path_to_thumbs_directory)) {
            if(mkdir($path_to_thumbs_directory)) {
                    
                imagejpeg($nm, $path_to_thumbs_directory . $filename);
                    
                $tn = '<a href="'. $path_to_image_directory . $filename .'"><img style="border: 0;" src="'. $path_to_thumbs_directory . $filename .'" alt="'. $filename .'" /></a>';
                $tn .= '<br />Congrats! Your folder has been successfuly created.';
                    
                echo $tn;
            }

        } else {
                
            imagejpeg($nm, $path_to_thumbs_directory . $filename);
                
            $tn = '<a href="'. $path_to_image_directory . $filename .'"><img style="border: 0;" src="'. $path_to_thumbs_directory . $filename .'" alt="'. $filename .'" /></a>';
            $tn .= '<br />Congrats! Your image has been successfuly created.';
            
            echo $tn;            
        }
    }
?>
 
Zuletzt bearbeitet:

CIX88

Aktives Mitglied

AW: thumbnail erstellen.

Zunächst ist im regulären Ausdruck ein kleiner Fehler:
> preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])

besser:
preg_match('/\.(jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])

Nur ein Punkt (nicht maskiert) ist ein Steuerzeichen, auch in einer Zeichenklasse.

> für mehrer Bilder zum laufen

Naja, einfach das ganze in eine Funktion packen.
Aus einer Image-Ressource lassen sich auch mehrere Bilder speichern, solange nicht der Speicher gelöscht ist, aber das steht doch alles im PHP-Handbuch.

Vorsicht nur ein Beispiel zum Prinzip:


Werden mehrere Bilder mittels $_FILES['fupload'] gesendet, dann das Array durchlaufen und die Bilder über eine Funktion erstellen lassen. Der Speicher sollte aber in der Funktion frei gemacht werden, sonst stirbt das Script !



> Aber iwie klappt da nix
Das ist eine sau schlechte Fehlerbeschreibung für Leute die helfen sollen.
Vielleicht geht es mal etwas genauer.
 

puur

Nicht mehr ganz neu hier

AW: thumbnail erstellen.

hm ich weiß nicht wie ich es noch besser erläutern kann. also ambesten ihr probiert das Script mal aus, dann müsste euch auffallen das nur vom ersten Bild ein thumb erstellt wird.
Da stellt sich mir jetzt die Frage wieso ;) ich mein ne idee hab ich ja und zwar scheint mir so zu sein das $_FILES['fupload'] nur das erste Bild aufnimmt.
 

netbandit

Aktives Mitglied

AW: thumbnail erstellen.

Schau im fertigen Html-Quelltext, nachdem Du die Anzahl der Felder eingegeben hast. Sind es mehr als einer, wirst Du feststellen, dass

HTML:
<input type="file" name="fupload" />
mehrmals vorkommt, der Name (in Deinem Fall fupload) sollte pro Formular allerdings nur einmal vorkommen, bzw muss eindeutig sein. Ansonsten wird php nur eines davon verarbeiten (ich glaube das Letzte), überschreiben sich gegenseitig. Arbeite mit Arrays und verarbeite diese z.B. in einer Schleife.

Die vorherigen Tipps solltest Du trotzdem beherzigen, sonst geht der Server in die Knie (Speicher wieder frei geben, etc.) ;)
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben