PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bildergalerie: statisch oder dynamisch?


Nase
2004-07-29, 13:42:32
Hi,

ich überlege mir schon seit längerem, was für eine Bildergalerie besser geeignet ist. Erstelle ich für alle Bilder ein Thumbnail und speichere es mit auf dem Webserver oder lasse ich die Thumbs dynamisch per PHP-Script generieren.

Pluspunkt für das Script: Ich muss mir nich die Arbeit machen, die Bilder zu erstellen. Auch wenn dies mit dem richtigen Grafikprogramm und per Batch relativ fix geht. Ausserdem verbrauchen die Thumbs auch wieder Speicherplatz, der mit dieser Methode ja wegfallen würde.
Doch nimmt es ja einige Zeit in Anspruch die Bilder zu erstellen. Auf meiner lokaler Entwicklungsumgebung dauerte es unangenehm lange, bis ich die Bilder zu Gesicht bekommen habe. Auch wenn ich die Galerie nur auf 12 Bilder pro Seite beschränkt habe.
Die große Version der Bilder ist zwischen 80 und 300kb groß.

Pluspunkt für die selbst erstellten Vorschaubilder: Sie sind im Schnitt zwischen 500-1000 Byte kleiner und sehen etwas besser aus.

Also lautet die Frage: Script (dynamisch) oder fertige Thumbnails (statisch)?


Nebenfrage: Warum unterscheidet sich die Qualität der Bilder von dem Standard, wenn ich diese mit imagejpeg($image, "", 7.5); ausgebe? Eigentlich ist das doch gleichbedeutend mit imagejpeg($image);.

Sphinx
2004-07-29, 13:59:21
Hi Nase,

Also die Vorteile eines Script basierendenen Thumbgenerators mittels PHP ist, wie du es schon erläutert hast, der Administrationsaufwand. Das Script erledigt für Dich die Thumbsausgabe aus allen orginal Bildern.

Zur Geschwindigkeit kann ich nur sagen das es bei mir auf meiner lokalen Entwicklungsumgebung < 1-2 sec Dauert bei Bildern mit JPG >20 Stück wenn überhaupt...

Auf dem Webserver läuft das Script nicht schlechter bzw. kann sogut wie keine Unterschiede feststellen. Als Beipiel für die Thumbsgenerierung bin ich dabei ein CMS System zu Entwickeln welches eingefügte Bilder als Thumbs anzeigt.
Bsp.Entwicklung : http://sphinx.elite-marines.de/

Der Nachteil den ich zur Zeit habe ist das ich mit BMP und GIF Formaten nicht weit komme auch wenn die GD-Library seid neuestem Gif Support bietet ist mein Webspace beim Provider noch nicht in der Lage...


Zu deiner letzten Frage :

imagejpeg($image, "", 7.5) = Qualität = 7,5 % | Verlust = 92.5%

imagejpeg($image) = imagejpeg($image, "", 75) = Qualität = 75%

Nase
2004-07-29, 14:08:32
Original geschrieben von Sphinx
Zu deiner letzten Frage :

imagejpeg($image, "", 7.5) = Qualität = 7,5 % | Verlust = 92.5%

imagejpeg($image) = imagejpeg($image, "", 75) = Qualität = 75% Das stimmt so nicht. Es gibt nur 11 Stufen, die man als Qualität einstellen. 0-10. 10 ist dabei das höchste, 0 das schlechteste. Voreinstellung ist 7,5. So hat es mir auf jedenfall Rasmus Lerdorf erzählt. Trotzdem ergibt sich bei mir ein erheblicher Unterschied wenn ich die Qualität direkt mit 7.5 angebe.


Aber erstmal danke für deine Antwort :). Ich bin natürlich noch weiter an den Vor- und Nachteilen der beiden Verfahren interessiert.

Sphinx
2004-07-29, 14:09:34
Original geschrieben von Nase
Das stimmt so nicht. Es gibt nur 11 Stufen, die man als Qualität einstellen. 0-10. 10 ist dabei das höchste, 0 das schlechteste. Voreinstellung ist 7,5. So hat es mir auf jedenfall Rasmus Lerdorf erzählt. Trotzdem ergibt sich bei mir ein erheblicher Unterschied wenn ich die Qualität direkt mit 7.5 angebe.


?

http://de.php.net/imagejpeg

Nase
2004-07-29, 14:15:53
Tja, weiss ich jetzt auch nicht. In meinem Buch stehts anders drin.

RMC
2004-07-29, 14:54:57
Ich hab damals auch von PHP automatisch Thumbs erstellen lassen, mit der Funktion "imagecreatefromjpeg"...das Resultat war mehr als bescheiden...!

Ist "imagejpeg" denn besser?

Nase
2004-07-29, 15:02:18
Original geschrieben von RMC
Ich hab damals auch von PHP automatisch Thumbs erstellen lassen, mit der Funktion "imagecreatefromjpeg"...das Resultat war mehr als bescheiden...!

Ist "imagejpeg" denn besser? Hat nicht so viel miteinander zu tun. imagejpeg ist für die Ausgabe des Bildes zuständig. imagecreatefromjpeg "liest" dir ein Bild ein.

RMC
2004-07-29, 15:08:18
hm is richtig...sry ;)



// leeres image für thumbnail generieren
$thumb = imagecreate($newx,$newy);

// originalbild kopieren, auf thumb-grössen skalieren und in das leere thumbnail schreiben

imagecopyresized ($thumb, $img, 0, 0, 0, 0, $newx, $newy, $oldx, $oldy);

// mögliches altes thumbnail löschen
@unlink ($target);

// thumbnail mit jpeg kompression abspeichern
imagejpeg ($thumb,$target,$thumb_quality);



Hm ja so hat das damals bei mir ausgesehn, Quality war 100%.

PHP hat teilweise JPEG Thumbs mit kompletten Falschfarben generiert, manchmal waren die Bilder einfach nicht mehr zu erkennen auf den Thumbs. Da wurde aus Schwarz Braun, aus Weiß Grau usw. und das war gar nicht schön :(

Nase
2004-07-29, 15:16:50
Bei mir siehts so aus:

<?php
$source = imagecreatefromjpeg($path);
$width = imagesx($source);
$height = imagesy($source);
$x = 130;
$y = 100;
$image = imagecreatetruecolor($x, $y);
imagecopyresized($image, $source, 0, 0, 0, 0, $x, $y, $width, $height);
header("Content-Type: image/jpg");
imagejpeg($image, "", 50);
imagedestroy($image);
?>
Aber darum geht es mir ja auch überhaupt nicht. Wollte nur wissen, welches Verfahren ressourcenschonender/userfreundlicher ist.

Sphinx
2004-07-29, 15:51:55
@ RMC PS : Für alle anderen als GIF...

ImageCreateTrueColor Je nach verwendeter GD-Lib, PHP Version

@ Nase vielleicht hilft dir das weiter um die Bilder in einem angemessenem Verhältniss zu skalieren...

Habe mal ein wenig an deinem Script (mit selben Variablen + Ergänzung was gechanged was normal so lauffähigsein müsste da auf dein Bsp. Script optimiert...)
Dadurch sparst du dir nochmal ordentlich Traffic und die Bilder erscheinen im richtigen Verhältniss...



// Mime Typ auslesen und setzen
$imageinfo = GetImageSize($path);
$mime = $imageinfo[2];
if ($mime == "2"){
header("Content-type: image/jpeg");
}
if ($mime == "1"){
header("Content-type: image/gif");
}
if ($mime == "6"){
header("Content-type: image/bmp");
}
if ($mime == "3"){
header("Content-type: image/png");
}

$width = $imageinfo[0];
$height = $imageinfo[1];

// Definiert MAX THUMB Größe
$MaxWidth = 150;
$MaxHeight = 130;

// Skaliert Bilder im Richtigen Verhältniss

if ($height< $width){
$resizedfaktor = $height/ $width;

$x = $MaxWidth;
$y = $MaxWidth* $resizedfaktor;
}

if ($height> $width){
$resizedfaktor = $width/ $height;

$y = $MaxHeight;
$x = $MaxWidth* $resizedfaktor;
}

if ($height== $width){
$resizedfaktor = $width/ $height;

$y = $MaxHeight;
$x = $MaxHeight;
}

if ($width<= $MaxWidth){
if ($height<= $MaxHeight){
$resizedfaktor = $width/ $height;

$y = $height;
$x = $width;
}
}

// Image erstellen aus Orginal *GIF SUPPORT BEI PURETEC 1und1...

if ($mime == "1"){
$source = ImageCreateFromGif("$path");
$image = ImageCreate($x, $y);
}

if ($mime == "2"){
$source = imagecreatefromjpeg("$path");
$image = ImageCreateTrueColor($x, $y);
}

if ($mime == "3"){
$source = ImageCreateFromPng("$path");
$image = ImageCreateTrueColor($x, $y);
}

imagecopyresized($image, $source, 0, 0, 0, 0, $x, $y, imagesx($source), imagesy($source));


// GIF Support beim Provider z.B. Puretec,1und1...
if ($mime == "1"){
ImageGif($image);
}

// Qualität auf 80% bei mir...
if ($mime == "2"){
ImageJPEG($image, "", 80);
}

if ($mime == "3"){
imagepng($image);
}


imagedestroy($image);

Nase
2004-07-29, 16:01:47
Danke für deine Mühe, aber das brauch ich alles nicht. Ich gebe jedes Bild, egal welches Seitenverhältnis es hat, mit der gleichen Breite und Höhe aus. Alle Bilder liegen auch immer im JPEG-Format vor. Mein Script funktioniert ja, macht auch keine Probleme. Mir geht es lediglich darum, ob es Sinn macht, die Thumbs von Hand zu erstellen bzw. von einem Script generieren zu lassen. Dabei möchte ich gerne wissen, welches mehr Aufwand darstellt.

Script:
1. ich spare mir die Arbeit, die Thumbs mit einem Grafikprogramm zu erstellen
2. ich spare mir einiges an Webspace
3. Bilder müssen immer erst vom Server in der großen Version geladen werden, um sie dann zu verkleinern
4. Bilder werden bei jedem Aufruf neu erstellt

Von Hand:
1. Bilder sehen besser aus
2. Bilder nehmen weniger Speicherplatz weg
3. es wird nur das Thumbnail geladen und übertragen

Das sind die Punkte, die mir eingefallen sind. Würde mich freuen, wenn jemand die Liste noch erweitern könnte.

huha
2004-07-30, 10:47:49
Mach die Thumbnails von Hand. Problematisch wird's bei der dynamischen Generierung eben vor allem aus Zeitgründen. Wenn man 100 Bilder dynamisch erstellt werden müssen, dauert das mitunter so lange, daß der Betrachter nicht mehr gewillt ist, noch weiter zu verweilen.

-huha

Sphinx
2004-07-30, 11:27:33
Original geschrieben von huha
Mach die Thumbnails von Hand. Problematisch wird's bei der dynamischen Generierung eben vor allem aus Zeitgründen. Wenn man 100 Bilder dynamisch erstellt werden müssen, dauert das mitunter so lange, daß der Betrachter nicht mehr gewillt ist, noch weiter zu verweilen.

-huha

Nja auch wenn man Thumbs mittels eines Tools (Batch) von Hand (Statisch) erstellt. So bleibt es nicht aus die ">100" Bilder auch von Hand hinzuzufügen - auch wenn man sich einiger kniffe der Dateibezeichnung zu Hilfe macht Erstelle Thumb aus orginal.jpg -> orginal_thumb.jpg und per Script diese so in der Gallery ausliest anzeigt mittels Scripts.

Auf dem Webserver liegen dann anstelle der Orginalen auch die Thumbsversionen...

Die Qualität ist allerdings ein nicht zu unterschätzender Vorteil der von Tools generierten Thumbs...

Generiertes Thumb von der GD Library 80% Qualität (6,01KB)
http://sphinx.elite-marines.de/previewurlpicture.jpg

vs Tool (JASC) Verkleinertes Bild mit Komprimierungsfaktor 20 (0=Beste Qualität -> 100 Schlechteste) (4,72KB)

http://sphinx.elite-marines.de/proggie.jpg

Bei >100 Bildern sollte man egal welches Verfahren auf eine "Blätterfunktion" umschwenken. Das macht kein User auf dauer mit.

Meistens muß man sich fragen wer administriert die Page,... sind es User die nur ihre Avatars hochladen wollen, sind es Screenshots aus Spielen die jeder Benutzer für einen Match hochlädt bsp. (Clan) oder ist es nur eine feste Gallery die eine Urlaubsreise des Betreibers zeigt.

Ich denke mal beide Verfahren haben für den speziellen Verwendungszweck ihre Vorteile und Nachteile...

HellHorse
2004-07-30, 11:37:50
Naja, du musst die Thumbnails ja nicht immer neu generieren, wenn die Seite aufgerufen wird, sondern nur falls es noch nicht existiert oder das Erstellungsdatum des Thumbs kleiner ist, als das des Bildes.
Das gibt zwar etwas mehr zu hacken, ist aber aus meiner Sicht die eleganteste Lösung.
(bringt leider deine Liste durcheinander)

Sphinx
2004-07-30, 11:49:26
@ Nase zu :

3. Bilder müssen immer erst vom Server in der großen Version geladen werden, um sie dann zu verkleinern

Besser:
Das ist nur der I/O des Dateisystems innerhalb des Servers...

Der User wartet nur minimalst etwas länger bis das Bild Generiert worden ist und lädt in der Regel etwas länger die generierten Thumbs da sie in der Regel etwas größer sind.

Nase
2004-07-30, 11:54:53
Original geschrieben von Sphinx
@ Nase zu :

3. Bilder müssen immer erst vom Server in der großen Version geladen werden, um sie dann zu verkleinern

Besser:
Das ist nur der I/O des Dateisystems innerhalb des Servers...

Der User wartet nur minimalst etwas länger bis das Bild Generiert worden ist und lädt in der Regel etwas länger die generierten Thumbs da sie in der Regel etwas größer sind. Das wollte ich damit eigentlich ausdrücken, ja.

@huha:
Pro Seite der Galerie genau 12 Bilder. Können je nachdem, welche Seite es ist, auch weniger sein.

@Hellhorse:
Du meinst also, dass ich ein Script schreiben soll, dass mir die Thumbnails erstmal generiert, dann aber auf dem Webspace speichert? Da kann ich die besser alle erst von Hand erstellen. Siehe meine angeführten Vorteile und den Vergleich von Spinx.

Kinman
2004-07-30, 12:14:00
ich finde es kommt einfach drauf an ob du es dir einfacher machen willst (script) oder ob du dir den mehraufwand des Thumbnail erstellen antust. Und wie dir der Webspace reicht.

mfg Kinman

RMC
2004-07-30, 13:31:49
Also ich machs so: da die Seite für jmd. anderen ist, und der Aufwand so gering wie möglich sein sollte, hab ich im Administrator-Backend eine Funktion eingebaut, welche auf Knopfdruck Thumbs von den hochgeladenen Bildern erzeugt und speichert.

Wenn ich die Seite selber betreuen würde dann würden mir die paar einfachen Handgriffe (Thumbs manuell erstellen und hochladen) nichts ausmachen, aber für den Kunden sollte das ja bequem sein.

btw: das "On-The-Fly" generien von Thumbs jedesmal beim Laden der Gallerie find ich nicht so toll, denn das generien dauert schon ein wenig lang IMHO. Ich habs zwar noch nicht ausprobiert, könnte mir aber vorstellen dass das länger dauert als beispielsweise 16 Thumbs (Bilderreihe von 4*4) von je 5-7kb zu laden.

Oder nicht? :)