Seite 1 von 1

cApiImgScale und Performance

Verfasst: Mi 17. Nov 2010, 08:03
von CharlyBrown
Hallo NG,

ich wollte die Funkiton cApiImgScale nutzen, um größere Bildermengen zu bearbeiten. Hab mir gedacht ich nehme mir einen Ordner aus der Dateiverwaltung, in dem User dann später die ("rohen") Bilder hochladen kann. Aus dieser wollte ich mit folgendem Code die Bilder generieren lassen. Diese werden dann beim Aufruf via Fancybox angezeigt.

Das klappt auch soweit, nur bekomme ich da bei größeren Datenmengen ein Performanceproblem. Im Beispiel wären das 77 Bilder, die in Kleinformat und Großformat berechnet werden. Das dauert derzeit 15 Sekunden, wenn die Bilder noch gecached werden müssen gar 30 Sekunden (lokal). Kann man das noch optimieren?

Code: Alles auswählen

<?php 
$linktitle = "Wintergärten";
$iWidthThumb = 120;
$iHeightThumb = 120;
$iWidthBig = 640;
$iHeightBig = 480;
$folder = "upload/images/content/referenzen/wintergaerten/";
$files1 = scandir($folder);
$iAnzahlPics = count($files1)-2;
$iCols = 4;
$iRows = floor($iAnzahlPics / $iCols);

if (($iAnzahlPics % $iCols) > 0) {
	$iRows ++;
}

?>
<div id="examples">
	<table class="galerie" align="center" border="0" cellpadding="2" cellspacing="2">
		<tbody>
<?php 
	$iCounter = 3;
	for ($i=0; $i<$iRows; $i++) {
		//Tabellenzeilen erstellen
		echo '<tr>';
			for ($a=0; $a<$iCols; $a++)
			{
				//Dateipfad zusammenbauen
				$sImageSource = $folder . $files1[$iCounter];
				if (empty($files1[$iCounter])) {
					echo '<td></td>';
				} else {
				?>
					<td><a class="grouped_elements" rel="group" title="<?php echo $linktitle;?>" href="<?php echo cApiImgScale($sImageSource, $iWidthBig, $iHeightBig);?>"><img title="<?php echo $linktitle;?>" alt="<?php echo $linktitle;?>" src="<?php echo cApiImgScale($sImageSource, $iWidthThumb, $iHeightThumb);?>" /></a></td>
				<?php 
				}
				$iCounter ++;
			}		
		echo '</tr>';	
	}
?>
		</tbody>
	</table>
</div>
Danke für´s Lesen und für Tipps!

Frank

Re: cApiImgScale und Performance

Verfasst: Mi 17. Nov 2010, 08:08
von Dodger77
Es kommt dabei natürlich auf die Dateigrößen/Abmessungen der Bilder an, so dass da durchaus viele Zeit vergehen kann. Je nach Serverpower und EInstellungen kann es also auch mal Abbrüche geben (Stichwort: max_execution_time). Falls auf dem Server ImageMagick vorhanden ist, kann man evtl. mit folgender Systemeinstellung bessere Performance erreichen:

Code: Alles auswählen

imagemagick    available    1

Re: cApiImgScale und Performance

Verfasst: Mi 17. Nov 2010, 09:23
von CharlyBrown
Hmm, nee imagemagick scheint dort nicht zu laufen. :(

Bisher habe ich Bildergalerien mit Thumbs immer folgendermaßen erstellt.

1) Große Bilder mit IfranView (o. ä.) auf das Maß skalieren
2) Kleine Bilder " " "
3) Große Bilder in Unterordner "big" hochladen
4) Kleine Bilder in Unterordner "thumbs" hochladen
5) Aufruf der Thumbs via Skript mit Verlinkung des großen Bildes.

Das ist natürlich nicht sehr komfortabel. Mit dem geposteten Code wollte ich das optimieren. Welche Möglichkeiten bieten sich sonst noch?

Gruß

Frank

Re: cApiImgScale und Performance

Verfasst: Mi 17. Nov 2010, 10:04
von Oldperl
Hallo Frank,

du könntest dich per CEC-Hook in den Uploadprozess einklinken und deine Bilder direkt beim Upload im Dateimanager als Thumbs erzeugen und ablegen lassen. Je nach Größe der Bilder und Serverkonfiguration würde ich dann aber nicht alle 10 Uploadmöglichkeiten nutzen, sondern die Bilder einzeln Uploaden, bzw. die Vorgaben auf 2-3 Uploadfelder begrenzen.

Gruß aus Franken

Ortwin

Re: cApiImgScale und Performance

Verfasst: Mi 17. Nov 2010, 17:06
von CharlyBrown
Hallo Oldperl,

ich nehm jetzt erst mal das hier für die großen Bilder:

http://forum.contenido.org/viewtopic.ph ... ImageScale

Für die Thumbs nehme ich dann die cApiImgScale und versuche die Anzahl der Bilder im Ordner auf eine erträgliches Maß zu begrenzen. Nicht schön aber selten!

Danke!

Frank

Re: cApiImgScale und Performance

Verfasst: Mi 17. Nov 2010, 20:23
von kummer
nun du könntest einfach die bildskalierung vornehmen, wenn das bild nachgefragt wird. da pro request immer nur ein bild zurück zu geben ist, gibt es dabei keinerlei leistungsprobleme mehr.

Re: cApiImgScale und Performance

Verfasst: Do 18. Nov 2010, 08:02
von CharlyBrown
Hallo kummer,

wie soll ich das anstellen? Wenn ich die Tabelle mit den Thumbs generieren lasse, brauche ich doch für das href-Attribut schon den Wert der skalierten Datei.

Über die Fancybox kann man sich ja auch durch die ganze Galerie durchklicken, die Bilder müssen dann schon fertig sein, oder nicht :?:

Gruß

Frank

Re: cApiImgScale und Performance

Verfasst: Do 18. Nov 2010, 10:09
von kummer
CharlyBrown hat geschrieben:Wenn ich die Tabelle mit den Thumbs generieren lasse, brauche ich doch für das href-Attribut schon den Wert der skalierten Datei.
die url kann dabei fest stehen, ohne dass die datei schon vorliegt, sofern sich der resultierende dateiname aus den gewünschten bildmassen und dem originaldateinamen ableiten lässt.

die skalierung beim upload vorzunehmen ist nur vordergründig günstig. ändern sich mal die bildmasse, hast du dateien, die du nicht mehr benötigst und dafür die gewünschten nicht. die performance der bildskalierung lässt sich auch mit imagemagick nicht massgeblich verbessern. das herunterrechnen von bildern nimmt einfach zeit in anspruch, daran lässt sich nur mit der bereitstellung von mehr rechenleistung begegnen. das aktuelle verfahren der aufnahme in die datenbank sowie der skalierung beim rendering des HTMLs weist einen designfehler auf, der zu leistungsproblemen führen muss. wird die skalierung vorgenommen, wenn ein bild nachgefragt wird, kostet das je nach grösse auch bis zu 1, 2 sekunden. aber die anzahl bilder spielt dann eben keine rolle.

Re: cApiImgScale und Performance

Verfasst: Do 18. Nov 2010, 11:16
von CharlyBrown
Ok, ich will das ja auch richtig machen und auf spätere Probleme habe ich wenig Lust :wink:

Unterstellen wir mal, die "großen" Dateien liegen im richtigen Format (600 * 450px - oder umgekehrt) in einem Upload-Ordner. Der Link der Thumbs zeigt direkt auf das Bild im Upload-Ordner. Hier gibt es also keine Bremse mehr. Wie baue ich mir jetzt das Vorschaubild (100 * 75px)? Denn das Bild wird ja schon "nachgefragt". Meiner bescheidenen Meinung nach gibt es da doch nur 3 Möglichkeiten:

a) Ich verfahre wie bisher, skaliere das Bild vorher lokal und lade es dann in einen Thumbordner hoch
b) Das Vorschaubild wird aus dem Modulskript via cApiImgScale generiert
c) In den Uploadprozess greift ein Skript, welches mir die Thumbnails in den von mir definierten Ordner in der von mir definierten Größe ablegt.

Du meinst wahrscheinlich Punkt d), nur verstehe ich ehrlich nicht so ganz, wie das konkret aussehen soll.

Ich hätte gerne Punkt c, das übersteigt allerdings (noch) meine Skills.....

Gruß

Frank

Re: cApiImgScale und Performance

Verfasst: Do 18. Nov 2010, 11:25
von kummer
CharlyBrown hat geschrieben:a) Ich verfahre wie bisher, skaliere das Bild vorher lokal und lade es dann in einen Thumbordner hoch
b) Das Vorschaubild wird aus dem Modulskript via cApiImgScale generiert
c) In den Uploadprozess greift ein Skript, welches mir die Thumbnails in den von mir definierten Ordner in der von mir definierten Größe ablegt.

Du meinst wahrscheinlich Punkt d), nur verstehe ich ehrlich nicht so ganz, wie das konkret aussehen soll.
genau den punkt meine ich. nun, du brauchst einfach eine datei, welche du ansprechen kannst, die dir das nachgefragte bild skaliert zurück gibt. zum beipsiel so (wenig elegant):

Code: Alles auswählen

<img src="getimage.php?path=pfad-zu-meiner-datei.jpeg&breite=100&hoehe=70+" />
die getimage.php skaliert das bild, cached es und liefert es zurück. mit rewriterules kannst du es dann natürlich noch etwas eleganter machen. hier ist halt dann einfach etwas phantasie gefragt.

mit folgender recherche kriegst du hinweise, wie das aussehen kann: http://www.google.de/#hl=de&source=hp&q ... c5c948a59c

Re: cApiImgScale und Performance

Verfasst: Do 18. Nov 2010, 11:47
von mfweb
Vielleicht hilft als Ideengeber auch das Modul AtqImageResizeHTML:
=> http://www.contenido-wiki.org/wiki/inde ... ResizeHTML.
Das Modul verkleinert bei Bedarf die Bilder, die per TinyMCE eingefügt worden sind. Das ist zwar nicht die gewünschte Funktionalität, aber das Modul enthält auch ein Caching der verkleinerten Bilder.

Re: cApiImgScale und Performance

Verfasst: Do 18. Nov 2010, 12:01
von CharlyBrown
... ziemlich harter Tobak für mich, aber ich fuchs mich da gerne rein.

Danke für die Links und Eure Unterstützung :D :D :D

Gruß

Frank