thumb proportional erstellen

sipoh

Erfahrenes Mitglied
Hallo,

ich habe ein Bild-Upload-Script und stehe nun vor folgendem Problem und hoffe, dass mir jemand weiter helfen kann.

Das bisherige Script lässt den User ein Bild im Format jpg oder gif mit einer definierten max Größe (KB) hochladen.

Die Thumbnail-Problematik habe ich so gelöst, dass ich die File org. einlese und mit witdh= verkleinere. Nicht smooth, habe die Angehensweise bisher vernachlässigt. Nun ist es aber soweit und ich kriege nur Errors.

Hier mal das Script mit Thumb-Generierung (vorher funktionierte es):

Code:
<?php 

if(isset($_POST["submitted"])){


$tempname = $_FILES['upload_file']['tmp_name'];    
$name = $_FILES['upload_file']['name'];    
$type = $_FILES['upload_file']['type'];    
$size = $_FILES['upload_file']['size']; 
$picsize = $_FILES['upload_file']['tmp_name'];
$error = '';  
$sSavePath = 'userpix/';  



list($width, $height) = getimagesize($picsize);


if($_FILES){ 
 if($type == "image/gif") {    
     $sFileType = '.gif';  
 } elseif ($type == "image/pjpeg"){  
     $sFileType = '.jpg';  
 }else{
	 $error .= "Es sind nur JPG- oder GIF-Formate erlaubt.<br />";       
 } 

// Rename
$name = get_username($userid).$sFileType;

 
 if($width>500 || $height>500) {
   $error .= "Das ausgewählte Bild ist zu groß. <b>Maximal 500 x 500 Pixel.</b>";    
}
  
 if($size > "512000") {    
     $error .= "Das ausgewählte Bild ist zu groß. <b>Maximal 500 KB.</b><br />";    
 }   
  
 if(!$error) { 
	 $succ .= "Dein Bild wurde erfolgreich hochgeladen.<br />";
	 $tmpl->assign('success',$succ);

     copy($tempname, $sSavePath.$name); 
	 
	 // thumb erstellen
	 $scale  = 6;
     $size   = getimagesize($name);
	 $width  = round($size[0]/$scale);
     $height = round($size[1]/$scale);
	 $src    = imagecreatefromjpeg($name);
     $dest   = imagecreatetruecolor($width,$height);
     $strFileSize = round($strFileSize/1024);
	 imagecopyresampled($dest,$src,0,0,0,0,$width,$height,$size[0],$size[1]);
     imagejpeg($dest,"userpix/thumb/".$name."-thumb.jpg",100);
	 

   $pfadundbild = $sSavePath.$name;    
   $result = $db->query("update user set pic = '".$pfadundbild."'  where userid = '".$userid."'"); 
 
      
 }    
 else {    

	 $tmpl->assign('eventm',$error);
 } 
}

}

/*
// Bild verkleinern und im Ornder "thumbs" speichern ***************************
$scale  = 6;
$size   = getimagesize("pfad/dateiname.jpg");
$width  = round($size[0]/$scale);
$height = round($size[1]/$scale);
$src    = imagecreatefromjpeg(pfad/dateiname.jpg);
$dest   = imagecreatetruecolor($width,$height);
                    
$strFileSize = round($strFileSize/1024);
imagecopyresampled($dest,$src,0,0,0,0,$width,$height,$size[0],$size[1]);
imagejpeg($dest,"../images/thumbs/wunschverzeichnis/dateiname.jpg",100);

imagedestroy($dest);
imagedestroy($src);

*/
?>

Ab // thumbs das neue Script.

Und da kriege ich folgende Errors:
Code:
Warning: getimagesize(admin.jpg) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\htdocs\com\picupload.inc.php on line 48

Warning: imagecreatefromjpeg(admin.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\xampp\htdocs\com\picupload.inc.php on line 51

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\xampp\htdocs\com\picupload.inc.php on line 52

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\xampp\htdocs\com\picupload.inc.php on line 54

Warning: imagejpeg(): supplied argument is not a valid Image resource in C:\xampp\htdocs\com\picupload.inc.php on line 55


Zum Anderen ist die Erstellung der Thumbs nur auf JPG ausgelegt. Sollen ja aber auch GIFs sein.
 
Lesen macht schlau ;)

Die ersten Fehlermeldungen weisen explizit darauf hin, dass unter dem angegebenen Pfad keine Datei gefunden / geöffnet werden kann. An dieser Stelle solltest du mal in Zeile 48 schauen und den Pfad korrigieren.

GIFs kannst du analog zu [phpf]imagejpeg[/phpf] via [phpf]imagegif[/phpf] verarbeiten. Ob eine Bilddatei vom Typ gif, jpeg, png oder was auch sonst ist, findest du via [phpf]getimagesize[/phpf] heraus, welche du bereits verwendet hast (Zuweisung an $size) An dieser Stelle empfehle ich dir einen Blick in die PHP-Dokumentation, die dir einen Hinweis darauf gibt, dass via $size[2] ein Flag zurückgeliefert wird, welches dir Auskunft darüber gibt, welchen Typs die angegebene Datei ist.

Weiterhin würde ich dir einen Blick in die PHP Doku zu [phpf]is_readable[/phpf] & [phpf]Upload[/phpf] empfehlen. Und zum Schluss noch ein kleiner Hinweis auf "image/pjpeg": Andere Browser, andere Sitten. Nicht jeder Browser (eigentlich keiner außer dem MSIE) sendet als MimeContentType für JPEGs "image/pjpeg" mit. Eine anderweitige Prüfung würde eventuell mehr Sinn machen.
 
Ok, ich hab das jetzt so gemacht.

Allerdings kann ich die Breite nicht ändern bzw. eine feste Breite und Höhe von 150 x 150 zuweisen. (das Bild ist dann meistens kleiner, soll aber auf einem 150x150 px großen grauen Hintergrund, zentriert liegen.) auf PHP.net habe ich einige Sachen gefunden, bringen mich aber nicht weiter.

Code:
<?

$dateiname=$HTTP_POST_FILES['upload_file']['name'];
$tempname = $_FILES['upload_file']['tmp_name'];

$path_parts = pathinfo($dateiname);
$ext = ".".$path_parts["extension"];


$neuefile = $userid."_".$username.$ext;
$neuefilethumb = "thumb_".$neuefile;

if($dateiname=='') {
  echo 'Bitte Bild auswählen';
  } else {

copy($tempname, "userpix/$neuefile");

$groesse=getimagesize("userpix/$neuefile");
$breite=$groesse[0];
$hoehe=$groesse[1];
$typ=$groesse[2];
print $typ;
$hoehe2=$hoehe*100/$breite;
$image1 = imagecreate(150,$hoehe2);
switch ($typ)
{
case 1:
$image = imagecreatefromgif("userpix/$neuefile");
break;
case 2:
$image = imagecreatefromjpeg("userpix/$neuefile");
break;
case 3:
$image = imagecreatefrompng("userpix/$neuefile");
break;
case 4:
$image = imagecreatefromwbmp("userpix/$neuefile");
break;
default: $gestorben="ja";
}
imagecopyresized($image1, $image, 0,0, 0,0,100,$hoehe2,$breite,$hoehe);

switch ($typ)
{
case 1:
imagegif($image1,"userpix/thumbs/$neuefilethumb");
break;
case 2:
imagejpeg($image1,"userpix/thumbs/$neuefilethumb",100);
break;
case 3:
imagepng($image1,"userpix/thumbs/$neuefilethumb");
break;
case 4:
imagewbmp($image1,"userpix/thumbs/$neuefilethumb");
break;
default: $gestorben="ja";
}

echo "Das Bild wurde hochgeladen und abgespeichert.";

}

?>
 
Zurück