cApiImgScale und Performance

Gesperrt
CharlyBrown
Beiträge: 77
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

cApiImgScale und Performance

Beitrag von CharlyBrown » Mi 17. Nov 2010, 08:03

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

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von Dodger77 » Mi 17. Nov 2010, 08:08

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

CharlyBrown
Beiträge: 77
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von CharlyBrown » Mi 17. Nov 2010, 09:23

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

Oldperl
Beiträge: 4255
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von Oldperl » Mi 17. Nov 2010, 10:04

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

CharlyBrown
Beiträge: 77
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von CharlyBrown » Mi 17. Nov 2010, 17:06

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

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von kummer » Mi 17. Nov 2010, 20:23

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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

CharlyBrown
Beiträge: 77
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von CharlyBrown » Do 18. Nov 2010, 08:02

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

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von kummer » Do 18. Nov 2010, 10:09

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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

CharlyBrown
Beiträge: 77
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von CharlyBrown » Do 18. Nov 2010, 11:16

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

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von kummer » Do 18. Nov 2010, 11:25

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
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

mfweb
Beiträge: 270
Registriert: Mo 12. Sep 2005, 18:31
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von mfweb » Do 18. Nov 2010, 11:47

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.
Immer mal ein Blick wert: Contenido Wiki ... auch schreibender Zugriff ist erlaubt!

CharlyBrown
Beiträge: 77
Registriert: Sa 13. Feb 2010, 16:07
Kontaktdaten:

Re: cApiImgScale und Performance

Beitrag von CharlyBrown » Do 18. Nov 2010, 12:01

... 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

Gesperrt