# thumbnails automatisch erstellen



## tkm (10. November 2001)

also ich hab mir schönes script geschrieben für dateienupload usw. und wollte dann ein thumbnailscript einbauen... nur das liefert mir immer ne fehlermeldung von wegen das der befehl nicht bekannt ist...ich schätze das GD-Library ist bei meinem host nicht installiert... 

nun zu meiner frage... kann man das mit den thumbnails auch irgendwie anders machen??? wenn ja wie? 

vielen dank


----------



## Dunsti (10. November 2001)

zunächst mal: ob die GD-Lib richtig installiert ist bekommst Du mit *phpinfo() * raus.

Zu den Thumbnails: da hast Du folgende Möglichkeiten:

- Du zeigst die Grafiken einfach skaliert an, also im <IMG> mit width und height skaliert (schlechte Lösung, da immer das "große Bild" geladen wird, also nicht unbedingt der Sinn von Thumbnails)

- Du lädst mit dem "normalen Bild" auch noch zusätzlich ein Thumbnail hoch, was Du vorher in einem Grafikprogramm skalierst

- Du verwendest eine andere Sprache als PHP zum skalieren der Bilder (z.B. Perl)

bei der letzten Variante bin ich aber leider überfragt, wie das genau geht 

hoffe trotzdem geholfen zu haben 

Gruß
Dunsti


----------



## tkm (10. November 2001)

jo danke für die schnelle antwort... das mit perl ist leider nicht möglich da ich kein cgi habe


----------



## tkm (10. November 2001)

toll

Warning: phpinfo() has been disabled for security reasons


----------



## Dunsti (10. November 2001)

hmmm .... tja .... in dem Fall fragst Du am besten mal Deinen Hoster .... oder suchst Dir gleich nen gescheiten 

Gruß
Dunsti


----------



## Spontan (12. November 2001)

kannst du mir genau sagen wie der befehl PHP fürs resizen ist
also resize($blob); oder so ????


----------



## tkm (12. November 2001)

ach mist die befehle hatte ich doch hier die tage noch... ich hab mir jetzt aber eins geschrieben wo man die thumbs zusätzlich hochläd... ich schau mal ob ich die befehle noch find


----------



## Dunsti (14. November 2001)

> kannst du mir genau sagen wie der befehl (php) fürs resizen ist
> also resize($blob); oder so ????



naja, ganz so einfach ist es nicht. 

Zunächst mal brauchst Du dafür die GD-Library. Damit hast Du dann spezielle Befehle für die Bildbearbeitung zur Verfügung.
Unter anderem auch Befehle zum Resizen von Bildern.


```
$im1=imagecreatefromjpeg("bild.jpg"); //erstellt ein Abbild im Speicher
$size=getimagesize("bild.jpg"); //ermittelt die Größe des Bildes

$breite=$size[0]; //die Breite des Bildes
$hoehe=$size[1]; //die Höhe des Bildes
$breite_neu=100; //die breite des Thumbnails
$hoehe_neu=100; //die Höhe des Thumbnails

$im2=imagecreate($breite_neu,$hoehe_neu); //Thumbnail im Speicher erstellen

imagecopyresized($im2,$im1,0,0,$breite,$hoehe,0,0,$breite_neu,$hoehe_neu); //Bild in Thumbnail kopieren

imagejpeg($im2,"tn_bild.jpg"); //Thumbnail speichern

imagedestroy($im1); //Speicherabbild wieder löschen
imagedestroy($im2); //Speicherabbild wieder löschen
```

Ist jetzt hier mit JPG ... geht aber auch mit GIF und PNG ... je nachdem, was Dein Webserver unterstützt (phpinfo() )

hilft das?

Gruß
Dunsti


----------



## asmodis! (23. Juni 2002)

Jetz hätt ich da trotzdem noch ne Frage....

Ich hab mal den Quellcode von Dunsti so wie er is bei mir eingebunden. Er erstellt auch n thumb, aber nur eben nicht als thumbnail, sondern einfach nur verkleinert in Schwarz. 

Ich hab mir die Anleitung zum speichern von Bildern in ner Datenbank durchgelesen und will jetzt eben diese Bilder in die DB eintragen. mit den normalen Pics klappt alles, nur mit den Thumbs, die mir erstellt werden brauch ich noch nicht versuchen sie in die DB einzutragen, da sie ja einfach nur Schwarz sind.

Mein Code sieht im Moment so aus:



```
<HTML>
<HEAD><TITLE>Speichern von Bildern in einer Datenbank</TITLE></HEAD>
<BODY>

<?php

// Wenn das Formular abgeschickt wurde, wird folgender Code ausgeführt

if ($submit) {

    // Verbindungsaufbau zur Datenbank
    // Diese Daten stehen in der config.php
    
include ("config.php");

$im1=imagecreatefromjpeg($form_data); //erstellt ein Abbild im Speicher
$size=getimagesize($form_data); //ermittelt die Größe des Bildes

$breite=$size[0]; //die Breite des Bildes
$hoehe=$size[1]; //die Höhe des Bildes
$breite_neu=100; //die breite des Thumbnails
$hoehe_neu=100; //die Höhe des Thumbnails

$im2=imagecreate($breite_neu,$hoehe_neu); //Thumbnail im Speicher erstellen

imagecopyresized($im2,$im1,0,0,$breite,$hoehe,0,0,$breite_neu,$hoehe_neu); //Bild in Thumbnail kopieren

imagejpeg($im2,"tn_bild.jpg"); //Thumbnail speichern

imagedestroy($im1); //Speicherabbild wieder löschen
imagedestroy($im2); //Speicherabbild wieder löschen

       $data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));

    $result=MYSQL_QUERY("INSERT INTO binary_data (description,bin_data,filename,filesize,imagesize,filetype) ".
        "VALUES ('$form_description','$data','$form_data_name','$form_data_size','$imagesize[3]','$form_data_type')");

    $id= mysql_insert_id();
    echo "<p>Die Datei wurde erfolgreich in der Datenbank gespeichert.";

    MYSQL_CLOSE();



} else {

  // Wenn das Formular noch nicht abgeschickt wurde, wird es angezeigt
?>

    <form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
    Bildbeschreibung<br>
    <input type="text" name="form_description"  size="40">
    <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000">
    <br>Datei die in der Datenbank gespeichert werden soll:<br>
    <input type="file" name="form_data"  size="40">
    <p><input type="submit" name="submit" value="submit">
    </form>

<?php
}
?>
</BODY>
</HTML>
```

Kann es daran liegen,  das ich  als $form_data einen Pfad habe, und keinen Dateinamen wie in Dunstis Code? Wenn ja, wie kriege ich den Dateinamen aus dem Pfad heraus? mit basename() hab ichs probiert, funzt aber irgendwie nicht

thx schon mal im Voraus.
asmo


----------



## asmodis! (25. Juni 2002)

ICh glaub ich hab jetzt den Fehler gefunden:




> _Original geschrieben von Dunsti _
> 
> 
> 
> ...



muss glaub ich heissen: 


```
imagecopyresized($im2, $im1, 0,0, 0,0,$breite_neu,$hoehe_neu, $breite,$hoehe);
```


zumindest funktioniert des jetzt so bei mir.....


----------



## Beseech (14. Dezember 2004)

bei mir gib es leider immer den fehler:


*Warning*: imagejpeg(): Unable to open 'tn_bild.jpg' for writing in */home/www/web13/html/robin/php/gallery_script.php* on line *21*

Line 21 ist: "imagejpeg($im2,"tn_bild.jpg"); //Thumbnail speichern" 
aus? was könnte da der fehler sein?

vielen Dank!
Beseech


----------



## Oliver Gringel (14. Dezember 2004)

Da fehlen offensichtlich Schreibrechte für das Verzeichnis / die Datei.


----------



## tommycush (16. Dezember 2004)

asmodis! hat gesagt.:
			
		

> zumindest funktioniert des jetzt so bei mir.....



Bei mir auch  Danke, sehr nützliches Thema.


----------



## Waleb (18. Dezember 2004)

Hallo,

   bei mir klappt es leider nicht. 



> *Warning*:  imagecopyresized(): supplied argument is not a valid Image resource in */www/htdocs/wal/bilder.php* on line *33*
> 
> *Warning*:  imagejpeg() [function.imagejpeg]: Unable to open '1' for writing in */www/htdocs/wal/bilder.php* on line *35*
> 
> ...


   mein Code:


```
<?php
   $name=array();
   $typ=array();
   $groesse=array();
   $tempname=array();
   
   for ($i=0; $i<=9; $i++)
   	{
   	$bild='bild'.$i.'';
   		array_push($name,$_FILES[$bild]['name']);
   		array_push($typ,$_FILES[$bild]['type']);
   		array_push($groesse,$_FILES[$bild]['size']);
   		array_push($tempname,$_FILES[$bild]['tmp_name']);
   		move_uploaded_file ($tempname[$i], "bilder/".$name[$i]);
   	
   	echo $name[$i];
   	$name[$i]=$zwischenspeichername;
   	$thumb1=imagecreatefromjpeg($zwischenspeichername); //erstellt ein Abbild im Speicher
   	$size=getimagesize($zwischenspeichername); //ermittelt die Größe des Bildes
   
   	$breite=$size[0]; //die Breite des Bildes
   	$hoehe=$size[1]; //die Höhe des Bildes
   	$breite_neu=100; //die breite des Thumbnails
   	$hoehe_neu=100; //die Höhe des Thumbnails
   
   	$thumb2=imagecreate($breite_neu,$hoehe_neu); //Thumbnail im Speicher erstellen
   
 	imagecopyresized($thumb2, $thumb1, 0,0,0,0, $breite_neu, $hoehe_neu, $breite, $hoehe); //Bild in Thumbnail kopieren
   
   	imagejpeg($thumb2,$zwischenspeichername.$i); //Thumbnail speichern
   
   	imagedestroy($thumb1); //Speicherabbild wieder löschen
   	imagedestroy($thumb2); //Speicherabbild wieder löschen 
   	}
   ?>
```
 
  Ist wirklich wichtig da ich die Gallerie bald brauche. 

  Danke


----------



## Lukaro (19. Dezember 2004)

Ich denke das liegt daran, dass auch du keine ausreichenden Rechte gesetzt hast, oder die Dateien nich da sind. 
Sind die Ordnerrechte auf 777?


----------



## Waleb (19. Dezember 2004)

Also die Bilder sollen im Ordner bilder gespeichert werden und die thumbs im ordner thumbs. Beide haben 777.


----------



## Oliver Gringel (19. Dezember 2004)

Die Variable $zwischenspeichername wird nirgendswo in deinem Script definiert.


----------



## Waleb (19. Dezember 2004)

Hm ja, ich habs jetzt mal gedreht: 


```
<?php
  $name=array();
  $typ=array();
  $groesse=array();
  $tempname=array();
  
  for ($i=0; $i<=9; $i++)
  	{
  	$bild='bild'.$i.'';
  		array_push($name,$_FILES[$bild]['name']);
  		array_push($typ,$_FILES[$bild]['type']);
  		array_push($groesse,$_FILES[$bild]['size']);
  		array_push($tempname,$_FILES[$bild]['tmp_name']);
  		move_uploaded_file ($tempname[$i], $name[$i]);
  
  	echo $name[$i];
  	$zwischenspeichername=$name[$i];
  	$thumb1=imagecreatefromjpeg($zwischenspeichername); //erstellt ein Abbild im Speicher
  	$size=getimagesize($zwischenspeichername); //ermittelt die Größe des Bildes
  
  	$breite=$size[0]; //die Breite des Bildes
  	$hoehe=$size[1]; //die Höhe des Bildes
  	$breite_neu=100; //die breite des Thumbnails
  	$hoehe_neu=100; //die Höhe des Thumbnails
  
  	$thumb2=imagecreate($breite_neu,$hoehe_neu); //Thumbnail im Speicher erstellen
  
 	imagecopyresized($thumb2, $thumb1, 0,0,0,0, $breite_neu, $hoehe_neu, $breite, $hoehe); //Bild in Thumbnail kopieren
  
  	imagejpeg($thumb2,'../thumbs/'.$zwischenspeichername.$i); //Thumbnail speichern
  
  	imagedestroy($thumb1); //Speicherabbild wieder löschen
  	imagedestroy($thumb2); //Speicherabbild wieder löschen
  	}
  ?>
```
 
 Diese Fehlermeldung kommt: 
*Warning*:  imagecopyresized(): supplied argument is not a valid Image resource in */www/htdocs/wal/bilder.php* on line *33*

*Warning*:  imagejpeg() [function.imagejpeg]: open_basedir restriction in effect. File(../thumbs/0) is not within the allowed path(s): (/www/htdocs/wal/) in */www/htdocs/wal/bilder.php* on line *35*

*Warning*:  imagejpeg() [function.imagejpeg]: Invalid filename '../thumbs/0' in */www/htdocs/wal/bilder.php* on line *35*

*Warning*:  imagedestroy(): supplied argument is not a valid Image resource in */www/htdocs/wal/bilder.php* on line *37*

*Warning*:  move_uploaded_file(bb.jpg) [function.move-uploaded-file]: failed to create stream: Permission denied in */www/htdocs/wal/bilder.php* on line *19*

*Warning*:  move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpbgjuUc' to 'bb.jpg' in */www/htdocs/wal/bilder.php* on line *19*
  bb.jpg
*Warning*:  imagecreatefromjpeg(bb.jpg) [function.imagecreatefromjpeg]: failed to create stream: No such file or directory in */www/htdocs/wal/bilder.php* on line *23*

*Warning*:  getimagesize(bb.jpg) [function.getimagesize]: failed to create stream: No such file or directory in */www/htdocs/wal/bilder.php* on line *24

*Kann das was mir den Ordnern zu tun haben? 

 ich verstehe diese Meldung nicht:

*Warning*:  getimagesize(bb.jpg) [function.getimagesize]: failed to create stream: No such file or directory in */www/htdocs/wal/bilder.php* on line *24*


----------



## Oliver Gringel (19. Dezember 2004)

Die Datei ist halt einfach nicht da bzw. kann nicht gelesen werden. Was gibt es bei der Fehlermeldung nicht zu verstehen?


----------

