# thumbnails erstellen mit gb



## lippi (16. August 2003)

hi, ich habe schon fast alle beiträge von hier durchgesehen aber sie helfen mir nicht weiter....

das ist mein thumbnail code den ich verwenden möchte um thumbnails von meinen bildern zu machen. 
in der variable picdir
steht folgendes:
$picdir ="/cyber/gallerycreator/pics/";
global $picdir;

in $rs['pfad'] steht der bildname, z.b. bild123.jpg
es sind ausschliesslich jpg bilder...


```
if($goto=="thumb") {
$sql="Select * from pics";
$result=$db->query($sql);
while($rs=$db->fetch($result)){
	
$im1=ImageCreateFromJPEG($picdir.$rs['pfad']); //erstellt ein Abbild im Speicher
$size=getimagesize($picdir.$rs['pfad']); //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_".$rs['pfad'].".jpg"); //Thumbnail speichern

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

}
}
```

gd ist auf dem webserver installiert.... weiss einer was ich falsch mache?

vielen dank im voraus.

ps: echt gutes und schönes forum hier!

hier noch die mysql fehlermeldungen:

Warning: imagecreatefromjpeg(/cyber/gallerycreator/pics/1701d_wall1.jpg) [function.imagecreatefromjpeg]: failed to create stream: No such file or directory in /home/userarea/public_html/cyber/gallerycreator/install.php on line 113

Warning: getimagesize() [function.getimagesize]: Unable to access /cyber/gallerycreator/pics/1701d_wall1.jpg in /home/userarea/public_html/cyber/gallerycreator/install.php on line 114

Warning: getimagesize(/cyber/gallerycreator/pics/1701d_wall1.jpg) [function.getimagesize]: failed to create stream: No such file or directory in /home/userarea/public_html/cyber/gallerycreator/install.php on line 114

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /home/userarea/public_html/cyber/gallerycreator/install.php on line 123

Warning: imagejpeg() [function.imagejpeg]: Unable to open 'tn_1701d_wall1.jpg.jpg' for writing in /home/userarea/public_html/cyber/gallerycreator/install.php on line 125

Warning: imagedestroy(): supplied argument is not a valid Image resource in /home/userarea/public_html/cyber/gallerycreator/install.php on line 127


----------



## Tim C. (16. August 2003)

Hast du mal probiert mit deiner Zusammensetzung des Pfades das Bild normal via echo "<img src="... " auszugeben ? Weil wenn ich mir die Fehlermeldungen so angucken würde ich mal darauf tippen, dass zwar dein Code an sich OK ist, er aber nicht auf das Bild zugreifen kann, weil wahrscheinlich der Pfad falsch ist.


----------



## lippi (16. August 2003)

das ganze funktioniert sozusagen... er speichert die bilder mit th_ vor dem eigentlichen dateinamen... mein problem ist es nur noch, das er nur ein schwarzer kasten speichert... an was kann das liegen?



```
while($rs=$db->fetch($result)){
	
$im1=ImageCreateFromJPEG($_SERVER['DOCUMENT_ROOT'].$picdir.$rs['pfad']); //erstellt ein Abbild im Speicher
$size=getimagesize($_SERVER['DOCUMENT_ROOT'].$picdir.$rs['pfad']); //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,$_SERVER['DOCUMENT_ROOT'].$picdir."th_".$rs['pfad']); //Thumbnail speichern

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

die bilder gebe ich schon mit dem image befehl aus:


```
if($goto=="see") {
$sql="Select * from pics";

// daten in table auslesen
$result=$db->query($sql);
$dir= $picdir;
while($rs=$db->fetch($result)){
	
	echo $rs["gallery"]."<br>\n";	
	echo $rs["pfad"]."<br\n>";
	echo "<br>";

	echo "<img src='".$dir."th_".$rs['pfad']."'></img><br><br>";
	
	}
}
```


----------



## Tim C. (16. August 2003)

```
//Probier mal an Stelle von
$im2=imagecreate($breite_neu,$hoehe_neu);
//folgendes
$im2=imagecreatetruecolor($breite_neu,$hoehe_neu);
//hatte das Problem glaube ich auch und es so gelöst.
```


----------



## lippi (19. August 2003)

vielen dank für die hilfe, werde das gleich mal versuchen....


----------



## SwissError (25. Oktober 2004)

Tim Comanns, du bist mein held  Mit dem truecolor hab ich nun ansehbare tumbnails auf diesem verfickten win. server


----------



## Sebs (27. November 2004)

Super hat mir auch geholfen!

Danke


----------



## 27apricot (11. Dezember 2004)

Hallo,

ich häng' mich da mal rein denn ich fange gerade an, mich damit zu beschäftigen und dieses Thread hat mir schon ein ganzes Stück weiter geholfen. Deswegen schon mal: Danke!

Trotzdem eine Frage: wenn ich das so mache, wie oben beschrieben, erstellt es zwar ein Thumbnail und kopiert einen Bildausschnitt aus dem Originalbild rein. Soweit alles prima, doch es zieht den Bildausschnitt im Thumbnail größer, was ja widersinnig ist.

Wie beeinflusse ich, ob es den Ausschnitt im Original lässt, vergrößert oder verkleinert?

Den Ausschnitt in meinem Thumbnail hab' ich übrigens bei der Koordinate 50/50 des Originalbildes angesetzt, deswegen der Ausschnitt aus der »Mitte«.

Danke schonmal im Voraus.
ciao | 27apricot

ps: Übrigens hab' ich im Script oben noch was entdeckt, was auf meinem Server als Fehler gemeldet wird:


```
//so steht's oben:
imagecopyresized($im2,$im1,0,0,$breite,$hoehe,0,0,$breite_neu,$hoehe_neu);
//so muss es nach php-Manual lauten:
imagecopyresized($im2,$im1,0,0,0,0,$breite,$hoehe,$breite_neu,$hoehe_neu);
//also: erst alle Koordinaten, dann alle Ausmaße
```


----------



## hpvw (11. Dezember 2004)

Wenn man schon imagecreatetruecolor nimmt, sollte man auch imagecopyresampled statt imagecopyresized nehmen. Einfach den Funktionsnamen ersetzen, die Parameter sind gleich.


----------



## 27apricot (12. Dezember 2004)

Dankesehr,

jetzt ist die Qualität des thumbnail-jpegs auf jeden Fall besser. Doch das Problem bleibt bestehen: der Ausschnitt ist größer als im Original!

Ciao + danke im Voraus,
27apricot.


----------



## 27apricot (31. Dezember 2004)

Hallo wieder,

Hmm. Vielleicht hilft's ja noch jemandem. Hab' den Fehler selbst gefunden, nach dem ich mich 'ne Weile lang nicht damit beschäftigt hatte:


```
// statt:
imagecopyresampled($im2,$im1,0,0,0,0,$breite,$hoehe,$breite_neu,$hoehe_neu); 
// muss es heißen:
imagecopyresampled($im2,$im1,0,0,0,0,$breite_neu,$hoehe_neu,$breite,$hoehe);
```

Bei jedem Parameter (Zwischenspeicherpfad, Koordinaten, Ausmaße) müssen zuerst die Daten des neuen Bildes und dann die des Quellbildes stehen. Das steht natürlich auch so im Manual und ist ja auch (wenn schon die anderen Parameter in der Reihenfolge angegeben sind) logisch, doch habe ich das irgendwie übersehen.

Schöne Grüße,
27apricot


----------



## Osham (2. März 2005)

Das klappt ja alles super! Habe es jetzt so in meine HP eingebunden. Habe nur noch ein Problem.

 Ich möchte gerne, dass die Höhe der Bilder immer auf 70 Pixel beschränkt ist, hochkant, wie querbilder, ohne das diese verzerrt werden. Ist das möglich? wenn ja wie?

 Querbilder sollen dann das ganze Bild Zeigen, Hochkantbilder sollen jeweils rechts und links einen weißen rand haben.

 Wäre für eine Antwort echt dankbar. Habe in der suche leider nix passendes gefunden!

 Danke


----------

