Automatisch thumbnails maken na upload

  • Onderwerp starter Onderwerp starter Niro
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Niro

Gebruiker
Lid geworden
5 jan 2007
Berichten
20
Weet er iemand soms hoe ik in het volgende script een automatische thumbnailscript verwerk?

PHP:
if (isset($opslaan)) {
    $sql3="INSERT INTO autos(merk, type, bouwjaar, brandstof, verbruik, prijs, carroserietype, vermogen, kleur, opties, transmissie, versnellingen, cilinderinhoud, deuren, km) VALUES('$merk', '$type', '$bouwjaar', '$brandstof', '$verbruik', '$prijs', '$carroserietype', '$vermogen', '$kleur', '$opties', '$transmissie', '$versnellingen', '$cilinderinhoud', '$deuren', '$km')";
	mysql_connect("192.168.0.69","cwint","..."); // mysql_connect("plaatsvandatabase","loginaanm","paswoord");
	mysql_select_db("geysensm"); // mysql_select_db("naamvandatabase");
   	$result = mysql_query("$sql3");
	$auto_id = mysql_insert_id();
	$number_of_file_fields = 0;
    $number_of_uploaded_files = 0;
    $number_of_moved_files = 0;
    $uploaded_files = array();
    $upload_directory = dirname(__file__) . '/uploaded/'; //set upload directory
    /**
     * we get a $_FILES['images'] array ,
     * we procee this array while iterating with simple for loop 
     * you can check this array by print_r($_FILES['images']); 
     */
     
    for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
        $number_of_file_fields++;
			if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not
		        $number_of_uploaded_files++;
		        $uploaded_files[] = $_FILES['images']['name'][$i];
				if (move_uploaded_file($_FILES['images']['tmp_name'][$i], $upload_directory . $_FILES['images']['name'][$i])) {
                $number_of_moved_files++;
				$fotos="INSERT INTO images(image, auto_id) VALUES('".$_FILES['images']['name'][$i]."', '$auto_id')";
				mysql_connect("192.168.0.69","cwint","..."); // mysql_connect("plaatsvandatabase","loginaanm","paswoord");
				mysql_select_db("geysensm"); // mysql_select_db("naamvandatabase");
				$result = mysql_query("$fotos");}
				}else if(!empty($_FILES['images']['name'])){
				$fotosl="INSERT INTO images(image, auto_id) VALUES('geen_afbeelding.jpg', '$auto_id')";
				mysql_connect("192.168.0.69","cwint","..."); // mysql_connect("plaatsvandatabase","loginaanm","paswoord");
				mysql_select_db("geysensm"); // mysql_select_db("naamvandatabase");
				$result = mysql_query("$fotosl");
				
				
        	}
    }
    echo "Number of File fields created $number_of_file_fields.<br/> ";
    echo "Number of files submitted $number_of_uploaded_files . <br/>";
    echo "Number of successfully moved files $number_of_moved_files . <br/>";
    echo "File Names are <br/>" . implode(',', $uploaded_files);
	print "$merk is succesvol toegevoegd!<br /><br />";
}

Ik ben nog een beginner in php. Ik heb al opzoekingen gedaan maar weet niet hoe het hier in te verwerken.
 
Laatst bewerkt:
Ga er maar even goed voor zitten dan, denk ik.

Hier staat een voorbeeld van hoe je images resizet:
http://nl2.php.net/manual/en/function.imagecopyresized.php

Wat je wilt doen is na het moven van de file, deze openen met GD (de plaatjes bewerkings library van PHP) en hem kleiner maken; hoe staat in de tutorial uitgelegd.
Daarna moet je het plaatje ergens opslaan met behulp van (bijvoorbeeld) de imagejpeg() functie.
 
Ksnap nie echt hoe ik die imagecopyresized in mijn script kan inwerken. Ben al enkele dagen aan het zoeken naar script enz. en al verschillende geprobeerd in mijn script te verwerken maar zonder succes
 
Wat heb je dan?

Dit is een simpele versie van resize:
PHP:
<?php
// File and new size
$filename = 'test.jpg';
$percent = 0.5;

// Content type
header('Content-type: image/jpeg');

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb);
?>

Wat snap je er niet aan?
 
Nu heb ik dit:

PHP:
    for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
        $number_of_file_fields++;
			if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not
		        $number_of_uploaded_files++;
		        $uploaded_files[] = $_FILES['images']['name'][$i];
				if (move_uploaded_file($_FILES['images']['tmp_name'][$i], $upload_directory . $_FILES['images']['name'][$i])) {
                $number_of_moved_files++;
				$fotos="INSERT INTO images(image, auto_id) VALUES('".$_FILES['images']['name'][$i]."', '$auto_id')";
				mysql_connect("192.168.0.69","cwint","..."); // mysql_connect("plaatsvandatabase","loginaanm","paswoord");
				mysql_select_db("geysensm"); // mysql_select_db("naamvandatabase");
				$result = mysql_query("$fotos");
				$filename = $_FILES['images']['name'][$i];
				$percent = 0.5;
				list($width, $height) = getimagesize($filename);
				$newwidth = $width * $percent;
				$newheight = $height * $percent;
				$thumb = imagecreatetruecolor($newwidth, $newheight);
				$source = imagecreatefromjpeg($filename);
				imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
				imagejpeg($thumb);
				
}
				}else if(!empty($_FILES['images']['name']))

Waar geef ik nu aan waar hij die thumb moet opslaan? Mijn upload script geeft de mogelijkheid om meerdere afbeeldingen up te loaden, dus alle afbeeldingen moeten geresized worden.
 
misschien verklaard dit het gebruik!
PHP:
imagejpeg($new_image, $target_path);

een 3de parameter is er nog voor de qualiteit

Hier kun je het gebruik na lezen!
 
Zo deze code dan kloppen?
PHP:
$result = mysql_query("$fotos");
				$filename = $_FILES['images']['name'][$i];
				$new_image = $_FILES['images']['name'][$i];
				$target_patch = '/uploaded/thumb';
				$percent = 0.5;
				list($width, $height) = getimagesize($filename);
				$newwidth = $width * $percent;
				$newheight = $height * $percent;
				$thumb = imagecreatetruecolor($newwidth, $newheight);
				$source = imagecreatefromjpeg($filename);
				imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
				imagejpeg($new_image, $target_path);
				
}
 
Ik heb het even getest.

En ik krijg bij het uploaden de volgende fouten.

Warning: getimagesize(pagodetent 68x5.jpg) [function.getimagesize]: failed to open stream: No such file or directory in /opt/www/geysensm/web/www.cwint.be/admin/verwerken.php on line 52

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /opt/www/geysensm/web/www.cwint.be/admin/verwerken.php on line 55

Warning: imagecreatefromjpeg(pagodetent 68x5.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /opt/www/geysensm/web/www.cwint.be/admin/verwerken.php on line 56

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /opt/www/geysensm/web/www.cwint.be/admin/verwerken.php on line 57

Warning: imagejpeg(): supplied argument is not a valid Image resource in /opt/www/geysensm/web/www.cwint.be/admin/verwerken.php on line 58
Number of File fields created 1.
Number of files submitted 1 .
Number of successfully moved files 1 .
File Names are
pagodetent 68x5.jpgAlfa Romeo is succesvol toegevoegd!
 
volgens mij moet je de file eerst naar bv een tijdelijke map uploaden.
Want je afbeelding zweeft nog tussen iets en niets.

de afbeelding in die tijdelijke map gebruik je als source file en als het resize gelukt is verwijder je het bestand uit de tijdelijke map.

Dit is eigenlijk het script wat je zoekt!
PHP:
/**
 * Make thumbs from JPEG, PNG, GIF source file
 *
 * $tmpname = $_FILES['source']['tmp_name'];  
 * $size - max width size
 * $save_dir - destination folder
 * $save_name - tnumb new name
 * $maxisheight - is max for width (if not is for height)
 *
 * Author:  David Taubmann http://www.quidware.com (edited from LEDok - http://www.citadelavto.ru/)
 */
 
/*/    // And now how using this function fast:
if ($_POST[pic])
    {
    $tmpname  = $_FILES['pic']['tmp_name'];
    @img_resize( $tmpname , 600 , "../album" , "album_".$id.".jpg");
    @img_resize( $tmpname , 120 , "../album" , "album_".$id."_small.jpg");
    @img_resize( $tmpname , 60 , "../album" , "album_".$id."_maxheight.jpg", 1);
    }
    else
    echo "No Images uploaded via POST";
/**/

function img_resize( $tmpname, $size, $save_dir, $save_name, $maxisheight = 0 )
    {
    $save_dir     .= ( substr($save_dir,-1) != "/") ? "/" : "";
    $gis        = getimagesize($tmpname);
    $type        = $gis[2];
    switch($type)
        {
        case "1": $imorig = imagecreatefromgif($tmpname); break;
        case "2": $imorig = imagecreatefromjpeg($tmpname);break;
        case "3": $imorig = imagecreatefrompng($tmpname); break;
        default:  $imorig = imagecreatefromjpeg($tmpname);
        }

        $x = imagesx($imorig);
        $y = imagesy($imorig);
       
        $woh = (!$maxisheight)? $gis[0] : $gis[1] ;   
       
        if($woh <= $size)
        {
        $aw = $x;
        $ah = $y;
        }
            else
        {
            if(!$maxisheight){
                $aw = $size;
                $ah = $size * $y / $x;
            } else {
                $aw = $size * $x / $y;
                $ah = $size;
            }
        }  
        $im = imagecreatetruecolor($aw,$ah);
    if (imagecopyresampled($im,$imorig , 0,0,0,0,$aw,$ah,$x,$y))
        if (imagejpeg($im, $save_dir.$save_name))
            return true;
            else
            return false;
    }
?>
 
Laatst bewerkt:
Doe ik het nu juist?
Hij toont geen enkele fout meer, foto's worden gewoon geupload, maar geen thumbs.

PHP:
				$result = mysql_query("$fotos");
				
				$tmpname = $_FILES['images']['name'][$i];  
				$size =  480;
				$save_dir = '/uploaded/thumb/';
				$save_name = $_FILES['images']['name'][$i];
				$maxisheight = 480;
				
				function img_resize( $tmpname, $size, $save_dir, $save_name, $maxisheight = 0 )
				    {
				    $save_dir     .= ( substr($save_dir,-1) != "/") ? "/" : "";
				    $gis        = getimagesize($tmpname);
				    $type        = $gis[2];
				    switch($type)
				        {
				        case "1": $imorig = imagecreatefromgif($tmpname); break;
				        case "2": $imorig = imagecreatefromjpeg($tmpname);break;
				        case "3": $imorig = imagecreatefrompng($tmpname); break;
				        default:  $imorig = imagecreatefromjpeg($tmpname);
				        }
				 
				        $x = imagesx($imorig);
				        $y = imagesy($imorig);
				       
				        $woh = (!$maxisheight)? $gis[0] : $gis[1] ;   
				       
				        if($woh <= $size)
				        {
				        $aw = $x;
				        $ah = $y;
				        }
				            else
				        {
				            if(!$maxisheight){
				                $aw = $size;
				                $ah = $size * $y / $x;
				            } else {
				                $aw = $size * $x / $y;
				                $ah = $size;
				            }
				        }  
				        $im = imagecreatetruecolor($aw,$ah);
				    if (imagecopyresampled($im,$imorig , 0,0,0,0,$aw,$ah,$x,$y))
				        if (imagejpeg($im, $save_dir.$save_name))
				            return true;
				            else
				            return false;
				    }		
				    
				}
				}else if(!empty($_FILES['images']['name'])){
 
je moet nog wel de functie uitvoeren!

PHP:
img_resize( $tmpname, $size, $save_dir, $save_name, $maxisheight);
Dus iets van :
PHP:
$result = mysql_query("$fotos");
                
                $tmpname = $_FILES['images']['name'][$i];  
                $size =  480;
                $save_dir = '/uploaded/thumb/';
                $save_name = $_FILES['images']['name'][$i];
                $maxisheight = 480;
                img_resize( $tmpname, $size, $save_dir, $save_name, $maxisheight);
                
                function img_resize( $tmpname, $size, $save_dir, $save_name, $maxisheight = 0 )
                    {
                    $save_dir     .= ( substr($save_dir,-1) != "/") ? "/" : "";
                    $gis        = getimagesize($tmpname);
                    $type        = $gis[2];
                    switch($type)
                        {
                        case "1": $imorig = imagecreatefromgif($tmpname); break;
                        case "2": $imorig = imagecreatefromjpeg($tmpname);break;
                        case "3": $imorig = imagecreatefrompng($tmpname); break;
                        default:  $imorig = imagecreatefromjpeg($tmpname);
                        }
                 
                        $x = imagesx($imorig);
                        $y = imagesy($imorig);
                       
                        $woh = (!$maxisheight)? $gis[0] : $gis[1] ;   
                       
                        if($woh <= $size)
                        {
                        $aw = $x;
                        $ah = $y;
                        }
                            else
                        {
                            if(!$maxisheight){
                                $aw = $size;
                                $ah = $size * $y / $x;
                            } else {
                                $aw = $size * $x / $y;
                                $ah = $size;
                            }
                        }  
                        $im = imagecreatetruecolor($aw,$ah);
                    if (imagecopyresampled($im,$imorig , 0,0,0,0,$aw,$ah,$x,$y))
                        if (imagejpeg($im, $save_dir.$save_name))
                            return true;
                            else
                            return false;
                    }       
                    
                }
                }else if(!empty($_FILES['images']['name'])){
 
Ik heb het kunnen oplossen adhv een makkelijker script dat ik gevonden heb.

PHP:
				$result = mysql_query("$fotos");
				$n_width=135;          // Fix the width of the thumb nail images
				$n_height=100;         // Fix the height of the thumb nail imaage
				$add="uploaded/".$_FILES['images']['name'][$i]; // the path with the file name where the file will be stored, upload is the directory name. 
				$tsrc="uploaded/thumb/".$_FILES['images']['name'][$i];   // Path where thumb nail image will be stored
				$im=ImageCreateFromJPEG($add); 
				$width=ImageSx($im);              // Original picture width is stored
				$height=ImageSy($im);             // Original picture height is stored
				$newimage=imagecreatetruecolor($n_width,$n_height);                 
				imageCopyResized($newimage,$im,0,0,0,0,$n_width,$n_height,$width,$height);
				ImageJpeg($newimage,$tsrc);

				}
				}else if(!empty($_FILES['images']['name'])){

Toch bedankt om mij op weg te helpen.
 
werking is ongeveer hetzelfde, alleen dat wat ik je gaf was een functie.
En jij probeerde de functie verkeerd te gebruiken.

maar mooi dat het voor je werkt!
Hij werkt alleen maar voor jpg bestanden. Die functie kon ook png en gif bestanden aan.
 
Laatst bewerkt:
In de functie die je mij gaf kreeg ik een aantal fouten, die ik niet meteen opgelost kreeg
 
Kan kloppen, je had de functie ook aan het begin of einde van de pagina moeten zetten en in de pagina de functie moeten aanroepen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan