PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bildergallery, wie gehe ich es an?


Domi
06.03.2005, 15:39:00
Hiho,

also folgendes: Ich habe etz nen haufen Bilder in nem Ordner.. wie mache ich ne Gallery draus? Also folgendes: Ich habe mir das so gedacht, das ich mir einfach mal alle files im Ordner anzeigen lasse.. das wäre ja kein Problem, aber das problem an der ganzen Sache ist:

1. Ich will thumbs machen (noch nicht damit beschäftigt, aber link zur hilfe wäre ganz nett)
2. Mein Hauptproblem: wie bekomme ich da kommentare dazu? Also soll ich das per filename machen?

Soll ich in der Datenbank abfragen ob für nen filename schon nen eintrag vorhanden ist und sonst einen erstellen oder? Aber wie rufe ich dann die einzelnen pics auf? mit gallery.php?pic=1 wobei die 1 dann die ID ist mit dem das pic inner Datenbank is oda? Und dann ne 2. Tabelle mit den comments die ich dann mit der ID der ersten tabelle speichere um die comments zu speichern?

hmm.. danke erstmal!

Domi

//Edit: nein Danke, ich will kein fertig script haben auch wenns schon sooo viele gibt! ich wills selber lernen!

|Coding
06.03.2005, 15:55:49
//Edit: nein Danke, ich will kein fertig script haben auch wenns schon sooo viele gibt! ich wills selber lernen!
das ist schon mal eine gute vorrausetzung....

ich würde dir an dieser stelle erst mal raten, dass du dich einwenig mit den image funktionen auseinander setzt. für thumbs, wirst du die brauchen.

schau mal hier: http://php.net/image

speziell die funktionen imagecreatefrom*(), imagecopyresized() und getimagesize().

wäre alles andere als hilfreich, wenn du jetzt alles überstürzt und bei 100 anfängst.

Domi
06.03.2005, 17:20:38
juhu, das mit den thumbs is ja mal ne ganz einfache Sache! gibt ja für jeden scheiss schon ne fertige funktion die bei PHP schon dabei is.

habs allerdings mit imagecopyresampled gemacht..

aber wie gehe ich den jetzt an das problem mit der Datenbank?

xabbuh
06.03.2005, 17:23:59
aber wie gehe ich den jetzt an das problem mit der Datenbank?
Was genau möchtest du denn gerne machen?

|Coding
06.03.2005, 17:31:11
die klamotte mit den kommentaren könntest du so lösen:

tabelle mit 3 spalten anlegen,

1. spalte "id" als int mit auto_increment
2. spalte "filename" als varchar
3. spalte "kommentar" als varchar oder so

dann speicherst du die dateinamen mit dazugehörigem kommentar in der db ab, und holst sie wenn du sie brauchst aus der db.

Domi
06.03.2005, 17:49:45
nee das speichern der comments is it des prob, sondern wie erfasse ich alle pics und speicher die erstmal in die erste tabelle wenn se noch net da sind? *grad etwas 'aufn schlauch sitz'*

xabbuh
06.03.2005, 17:54:31
Sind die Bilder schon auf dem Webspace?

Domi
06.03.2005, 17:55:05
ne, hab se local mit xampp

//Edit: werden sowohl mit FTP, sowie auch per PHP formular hochgeladen wenn du das meintest ^^

|Coding
06.03.2005, 18:02:11
nee das speichern der comments is it des prob, sondern wie erfasse ich alle pics und speicher die erstmal in die erste tabelle wenn se noch net da sind? *grad etwas 'aufn schlauch sitz'*
entweder manuel (aber wer macht denn sowas :-) ) oder du schreibst dir ein script welches die bilder einsammelt und dann id, filename, kommentar in die db schreibt, dach dem du in ein formular den kommentar eingegeben hast.

xabbuh
06.03.2005, 19:15:07
Wobei ich Kommentare und Bilder wohl doch eher in zwei getrennten Tabellen abspeichern würde, wenn man mehrere Kommentare zu einem Bild ermöglichen möchte.

Domi
06.03.2005, 21:36:31
Wobei ich Kommentare und Bilder wohl doch eher in zwei getrennten Tabellen abspeichern würde, wenn man mehrere Kommentare zu einem Bild ermöglichen möchte.

Und dann ne 2. Tabelle mit den comments die ich dann mit der ID der ersten tabelle speichere um die comments zu speichern?


jo.. werd i au so machen. Die Idee is net schlecht. I meld mi spätestens wieder, wenns net klappt ^^

Domi
07.03.2005, 21:36:16
HILFE!!!11

Ich habe jetzt hier das Beispiel 2 genommen um die thumbs zu erstellen:

http://de2.php.net/manual/en/function.imagecopyresampled.php

Ich habe das jetzt als funktion umgewandelt, aber jetzt kann ich die funktion net einfach 5 mal hintereinander aufrufen wenn ich z. B. 5 thumbs nacheinander will, weil er mir ja nen jpeg ausgibt und nicht also html code mit <img src= ...

wie geht das etz?

xabbuh
07.03.2005, 21:46:55
Du solltest die Bilder mit imagecopyresampled() verkleinern und so dann auf dem Webspace speichern. Anschließend speicherst du den Namen der Bilder in der Datenbank, so dass du die Dateinamen auslesen und die Bilder anzeigen lassen kannst.

Domi
07.03.2005, 22:08:44
ja das is ja das prob. ich hab die pics jetzt alle in ./pics/

dann kann ich das ja so machen, dass er thumbs erstellt und die in ./pics_thumbs/ mit dem gleichen filename erstellt oder? Aber wie schreib i des dann inne file rein?

Serp
07.03.2005, 22:17:33
Schau dir mal die schöne Funktion imagejpeg() an... ;)

Domi
07.03.2005, 22:27:49
Bin ich so blöd und peil garnix mehr heute?


function creat_thumb($filename)
{
$width = 100;
$height = 100;
header('Content-type: image/jpeg');
list($width_orig, $height_orig) = getimagesize($filename);
if ($width && ($width_orig < $height_orig)) {
$width = ($height / $height_orig) * $width_orig;
} else {
$height = ($width / $width_orig) * $height_orig;
}
// Resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Output
return imagejpeg($image_p, null, 100);

}

wenn ich mir das Ergebnis anzeigen lasse, dann hab ich das bild .. jedoch will ich die ganz normal mit html tags einbinden, also würde ich es jetzt halt in eine andere file schreiben (mit dem gleichen Dateiname)



include('./functions.php');
$pic = creat_thumb("./pics/lol.jpg");
ImageJPEG($pic, "./pics_thumbs/lol.jpg", 100);



aber das klappt net .. er zeigt mit das Bild im Browser an, aber wirft keinen Fehler und nichts

//Edit: wahrscheinlich bin ich so müde, dass ich den Wald vor lauter Bäume net sehen kann.. ich geh erstmal pennen, würde mich aber Antworten freuen.. thx!

xabbuh
07.03.2005, 22:30:45
Lass dir von der Funktion creat_thum() nicht den Rückgabewert von imagejpeg() sondern die Variable $filename zurückgeben. Diesen kannst du dann in der Datenbank speichern.

Domi
08.03.2005, 14:34:59
if($domi == 'müde') {
Stop_doing_sth($domi);
}


..ne aber etz mal im Ernst, habs hinbekommen. Thx schonmal. Wenns interessiert wie ichs gmacht hab:


function create_thumb($filename, $newfilename)
{
// Set a maximum height and width
$width = 100;
$height = 100;

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

// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);

if ($width && ($width_orig < $height_orig)) {
$width = ($height / $height_orig) * $width_orig;
} else {
$height = ($width / $width_orig) * $height_orig;
}

// Resample
$image_new = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);

imagecopyresampled($image_new, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

imagejpeg($image_new, $newfilename, 100);
imagedestroy($image_new);
return 'done';
}


und das ruf i dann so auf:

echo create_thumb("./pics/lol.jpg", "./pics_thumbs/lol.jpg");

des setz ich etz einfach in eine Schleife und fürs solange aus, bis alle thumbs erstellt sind =)

//Edit: scheint aber immernoch net das richtige zu sein? Im IE zeigt er mir das 'done' im Mozilla / Opera will er nen Bild anzeigen?

|Coding
08.03.2005, 16:50:30
du kannst deiner funktion keinen rückgabewert verpassen, da liegt am header...

damit sagst du, dass die "seite" ein bild ist und auf bilder kann man nun mal nichts ausgeben :-)

Domi
08.03.2005, 17:58:19
du kannst deiner funktion keinen rückgabewert verpassen, da liegt am header...

damit sagst du, dass die "seite" ein bild ist und auf bilder kann man nun mal nichts ausgeben :-)

ups, das erklärt einiges! Aber wenn ich die Zeile einfach rauskommentier sollte es ja trotzdem gehen und auch wieder als funktion funktionieren oda? thx..

|Coding
08.03.2005, 18:54:32
müsste, ich habe es jetzt nicht getestet.

könntest du mal den teil zeigen, wo du die thumbs in deine seite einbaust?
ich habe da ne vorahnung...

Domi
08.03.2005, 20:52:45
hi,

also ich habe ne funktion, die mir alle files im ordner in nen array schreibt und sortiert:


function list_dir($verzeichnis)
{
$verz=opendir($verzeichnis);
$linkl = array ("0");
while ($file = readdir ($verz)){
if($file != "." && $file != ".." && $file != "Thumbs.db"){
array_push ($linkl, $file);
}
}
sort ($linkl);
closedir($verz);//Verzeichnis geschlossen
return $linkl;
}


ansonsten siehts so aus:


echo create_thumb("./pics/lol.jpg", "./pics_thumbs/lol.jpg");
$files = list_dir('./pics/');
$filecounter = count($files);

for ($i=1; $i<$filecounter; $i++) {
create_thumb("./pics/$files[$i]", "./pics_thumbs/$files[$i]");
}

$files2 = list_dir('./pics_thumbs/');
$filecounter2 = count($files2);

for ($i=1; $i<$filecounter2; $i++) {
echo "<img src="./pics_thumbs/" . $files2[$i] . "" > <br />n";
}


Bitte korrigiert mich, wenn etwas net so performance optimiert is.. siehe Signatur, bin NewBe =)

//Edit: Die Thumbs werden erstellt, dauert halt nen bischen *gg* Aber sollte jetzt noch abfragen ob die file schon existiert, sonst kein thumb machen..

|Coding
08.03.2005, 21:36:45
gut, meine vermutung hat sich nicht bestätigt.

was ich aber dennoch anmerken möchte ist, dass du besser natsort(), bzw. natcasesort() nutzen solltest, sonst kriegst du "komische" ergebnisse, wenn es ans sortieren von zahlen geht. es sei denn in den filenames kommen nie zahlen vor.

Domi
08.03.2005, 22:18:37
Hi,

also die Files sind meistens pics direkt von der digicam .. also kommen schon zahlen drin vor, ist aber nich zwingend, da oft auch so pics geadded werden.

Aber welche Vermutung hat sich den bestätigt? Nur das mit dem sort oder meintest was anderes?

Btw wollte ich mal anmerken, dass ich es echt in Ordnung finde, wie sich die Leutz in diesem Forum um die geposteten Probleme kümmern und nicht nur irgend eine Antwort posten und dann nie wieder rein schaun ;) *lob aussprech*

GreeTz Domi

|Coding
08.03.2005, 22:40:12
Aber welche Vermutung hat sich den bestätigt? Nur das mit dem sort oder meintest was anderes?
ich hatte ne andere art der einbindung deiner thumbs "befürchtet", aber diese vermutung hat sich ja nicht bestätig.

Btw wollte ich mal anmerken, dass ich es echt in Ordnung finde, wie sich die Leutz in diesem Forum um die geposteten Probleme kümmern und nicht nur irgend eine Antwort posten und dann nie wieder rein schaun ;) *lob aussprech*
wir sind ja hier auch alle ne humane community :-)

Domi
09.03.2005, 14:08:25
Also die thumbs werde ich auch vllt anders einbinden... Also ich werd halt aus der Datenbank abfragen, in welche kategorie diese gehören, wie viele klicks schon gemacht wurden und wie viele Komments schon geschrieben wurden. Aber wenns net klappt werd ich mich schon wieda melden, keine Angst ;)

|Coding
09.03.2005, 14:14:22
ich glaube wir haben nicht viel davon, wenn es bei dir mit den thumbs klappt. deswegen hat hier wohl auch keiner angst :-)

viel eher müsste man sagen: du darfst wieder kommen, wenn's nicht klappt, dann werden wir dir schon helfen, "keine angst"! ^_^

Domi
22.05.2005, 17:37:44
So, neues problem:

Im moment mache ich es etz so: Ich erfasse aus meinem Ordner pics alle Bilder, öffne sie, setzte nen copyright in form eines textes drauf, speichere sie wieder, erstelle ein thumbnail und erstelle einen Datenbank Eintrag dazu. Auch das mit den kommentaren in einer 2. Tabelle habe ich wunderbar hinbekommen. Aber jetzt meine Probleme:

Wie mache ich es am besten wenn ich verschiedene Kategorien der Bilder will? Alle pics in einen Ordner speicher mit immer forlaufender ID in der DB und dann einfach ne weitere Tabelle die jedem Bild ne Kategorie zuordnet? Also:


ID | pic_id | kat_id |
---+--------+---------
1 | 1 | 2 |
2 | 2 | 1 |
3 | 3 | 4 |


Und dann halt den kategorie IDs Namen geben?

Weiters problem: Wenn ich etz meine Bilder anzeige, dann lese ich einfach aus meiner DB alle filenamen raus und zeige sie dann an. So weit so gut, da es ja forlaufende IDs sind. Aber ich möchte gern verschiedene Bilder über ein Interface sperren, also dass sie weiterhin inkl kommentare vorhanden bleiben, nur nicht für den Besucher sichtbar sind. Normal zeige ich die Bilder dann im grossformat mit index.php?section=pictures&showimg=1 bzw ..img=2 ..img=3, aber wenn dort verschiedene fehlen, wie kann ich dann den "weiter" button machen, dass der direkt von 2 als nächstes Bild 5 nimmt? Soll ich da jedes mal abfragen ob das nächste Bild gesperrt ist oder nicht?

Noch ne Frage. Mit welcher Funktion pack ich statt nem Text nen gif file auf so ein Bild?

Hoffe auf nen kleinen Gedankenanstoss ;)

GreeTz Domi

xabbuh
23.05.2005, 12:44:51
Wie mache ich es am besten wenn ich verschiedene Kategorien der Bilder will? Alle pics in einen Ordner speicher mit immer forlaufender ID in der DB und dann einfach ne weitere Tabelle die jedem Bild ne Kategorie zuordnet? Also:


ID | pic_id | kat_id |
---+--------+---------
1 | 1 | 2 |
2 | 2 | 1 |
3 | 3 | 4 |


Und dann halt den kategorie IDs Namen geben?
Kann ein Bild in mehreren oder nur in einer Kategorie sein?

Weiters problem: Wenn ich etz meine Bilder anzeige, dann lese ich einfach aus meiner DB alle filenamen raus und zeige sie dann an. So weit so gut, da es ja forlaufende IDs sind. Aber ich möchte gern verschiedene Bilder über ein Interface sperren, also dass sie weiterhin inkl kommentare vorhanden bleiben, nur nicht für den Besucher sichtbar sind. Normal zeige ich die Bilder dann im grossformat mit index.php?section=pictures&showimg=1 bzw ..img=2 ..img=3, aber wenn dort verschiedene fehlen, wie kann ich dann den "weiter" button machen, dass der direkt von 2 als nächstes Bild 5 nimmt? Soll ich da jedes mal abfragen ob das nächste Bild gesperrt ist oder nicht?

SELECT
irgendwas
FROM
tabelle
WHERE
id > $id AND
gesperrt = nein
ORDER BY
id
LIMIT
1


Noch ne Frage. Mit welcher Funktion pack ich statt nem Text nen gif file auf so ein Bild?
Mit imagecopy() (http://de2.php.net/imagecopy) (Kopie ohne Änderung der Größe) bzw. imagecopyresampled() (http://de2.php.net/manual/de/function.imagecopyresampled.php) (Änderung der Größe). Allerdings hast du bei den Imagefunktionen von PHP Probleme mit Transparenten, glaube ich.
Da würde sich dann ImageMagick (http://www.imagemagick.org) anbieten, falls du das nutzen kannst.

Domi
23.05.2005, 18:10:46
Kann ein Bild in mehreren oder nur in einer Kategorie sein?


Wünschenswert, da es einmal einer Party zugeordnet wird und vllt noch nem bestof oder so.

Zu Problem 2:

Danke für das Stück code. Is ne gute Idee. Ich glaube, so werde ich das machen!

imagemagick? Also wenn ich wieder am eigenen PC bin und wieder DSL-Flat (nur ISDN atm / Minute Zahlung) dann werde ich mir das ma anschaun, wobei ich aber ein PHP Script bevorzuge, da ich 1. Was dabei lern und 2. Andere auch Bilder hochladen wollen ohne das gross zu veränden.

Ich meld mich die Tage nochmal..

xabbuh
23.05.2005, 20:13:07
Wünschenswert, da es einmal einer Party zugeordnet wird und vllt noch nem bestof oder so.
Das sollte dir auf jeden Fall vor dem Beginn überlegen, da davon auch deine Datenbankstruktur abhängt. Bei mehreren Möglichkeiten muss die Zuordnung über eine extra Tabelle laufen lassen, wie du es oben weiter ja auch geschrieben hast. Wenn dagegen nur eine Kategorie pro Bild möglich ist, kannst du auch die id der Kategorie direkt in der Tabelle der Bilder speichern.

Domi
24.05.2005, 08:36:32
Danke für den Tipp,

ich habe mitlerweile für alles eigene Tabellen. Also für die Bilder eine, für die comments eine und noch eine für die kategorien. Ich weiss nur nich wie das es jetzt, wenn ich mal 10.000 Bilder hab oder so. Wird das nicht zu langsam, wenn die Bilder (also nicht das ganze Bild, sondern nur filename und so) dann al1e in einer Tabelle sind?

lg Domi

xabbuh
24.05.2005, 12:03:28
Wird das nicht zu langsam, wenn die Bilder (also nicht das ganze Bild, sondern nur filename und so) dann al1e in einer Tabelle sind?
So lange du sinnvolle Abfragen schreibst (also nicht alle Bilder auf einmal etc.) sollte das kein Problem sein: http://php-faq.de/q/q-mysql-eignung.html