<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/pool/xslt_ht.xslt" type="application/xml"?>
<xsl:stylesheet
  xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
  xmlns:ii = "http://herbaer.de/xmlns/20110902/imgindex"
  xmlns:d = "http://herbaer.de/xmlns/20051201/doc"
  version = "1.0"
>
<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>imgix_thumbnail.xslt</title>
  <subtitle>Vorschau-Bildmontage (Einzelbild) zu einer "Bildgeschichte" im Web</subtitle>
  <date>2013-09-06</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<d:para xmlns="http://herbaer.de/xmlns/20051201/doc" role="stylesheet">
Diese Transformation erstellt aus einer Bildergeschichte
(XML-Namensraum <tag class="namespace">http://herbaer.de/xmlns/20080705/imgshow</tag>)
die Befehle, die das Vorschaubild erzeugen.
Das Vorschaubild wird aus den Bilddateien im Unterverzeichnis
<filename class="directory">images</filename> erzeugt.
</d:para>

<d:para>
Vorlagen zum Ersetzen von Text
</d:para>
<xsl:include href="/pool/txt.xslt"/>

<d:section>
  <d:para>
Der Befehl zur Montage von 4 Bildern.
Der Platzhalter <d:literal>${images}</d:literal>
steht für die Liste der Pfade der Bilder.
Im Ausführungs-Kontext dieses und der folgenden Befehle sind definiert:
  </d:para>
  <d:variablelist>
    <d:varlistentry>
      <d:term><d:varname>$imgdir</d:varname></d:term>
      <d:listitem>
        <d:para>
Verzeichnis der Bilddateien (Quellen).
        </d:para>
      </d:listitem>
    </d:varlistentry>
    <d:varlistentry>
      <d:term><d:varname>$tempdir</d:varname></d:term>
      <d:listitem>
        <d:para>
Verzeichnis für temporäre Dateien,
hier: quadratische Bildausschnitte, nicht verkleinert.
        </d:para>
      </d:listitem>
    </d:varlistentry>
    <d:varlistentry>
      <d:term><d:varname>$thumb</d:varname></d:term>
      <d:listitem>
        <d:para>
Dateipfad des zu erstellenden Vorschaubildes
        </d:para>
      </d:listitem>
    </d:varlistentry>
  </d:variablelist>
</d:section>
<xsl:param name="p_thumbnail4_cmd">
  <xsl:text>montage -tile 2 -geometry 60x60\&gt;+0+0 </xsl:text>
  <xsl:text>${images} $thumb</xsl:text>
</xsl:param>

<d:para>
Dieser Befehl erzeugt bringt ein einzelnes quadratisches (temporäres) Bild
auf die Vorschaubild-Größe.
Der Platzhalter <d:literal>${imgid}</d:literal> steht für die Kennung des Bildes.
</d:para>
<xsl:param name="p_thumbnail1_cmd">
  <xsl:text>convert -resize 120x120 $tempdir/${imgid}.jpg $thumb</xsl:text>
</xsl:param>

<d:para>
Dieser Befehl schneidet einen quadratischen Ausschnitt aus einem Bild aus.
</d:para>
<xsl:param name="p_crop_cmd">
  <xsl:text>proc_crop $imgdir/${imgid}.jpg $tempdir/${imgid}.jpg &amp;&amp; </xsl:text>
</xsl:param>

<xsl:output method="text" encoding="utf-8"/>

<xsl:template match="/">
  <xsl:apply-templates select="ii:imgindex"/>
</xsl:template>

<d:para>
Vorschaubild aus einem einzelnen Bild erstellen
</d:para>
<xsl:template match="ii:imgindex[ii:numrepr &lt; 4]">
  <xsl:apply-templates select="ii:image[ii:repr = 1][1]" mode="single"/>
</xsl:template>

<d:para>
Vorschaubild aus einem einzelnen Bild erstellen
</d:para>
<xsl:template match="ii:image" mode="single">
  <xsl:variable name="list">
    <xsl:text>${imgid},</xsl:text>
    <xsl:value-of select="ii:key"/>
  </xsl:variable>
  <xsl:call-template name="txt.replacelist">
    <xsl:with-param name="txt" select="$p_crop_cmd"/>
    <xsl:with-param name="list" select="$list"/>
  </xsl:call-template>
  <xsl:call-template name="txt.replacelist">
    <xsl:with-param name="txt" select="$p_thumbnail1_cmd"/>
    <xsl:with-param name="list" select="$list"/>
  </xsl:call-template>
  <xsl:text>;
</xsl:text>
</xsl:template>

<d:para>
Vorschaubild aus vier Bildern erstellen
</d:para>
<xsl:template match="ii:imgindex[ii:numrepr &gt;= 4]">
  <xsl:apply-templates select="ii:image[ii:repr = 1][position() &lt;= 4]" mode="crop"/>
  <xsl:call-template name="txt.replacelist">
    <xsl:with-param name="txt" select="$p_thumbnail4_cmd"/>
    <xsl:with-param name="list">
      <xsl:text>${images},</xsl:text>
      <xsl:for-each select="ii:image[ii:repr = 1][position() &lt;= 4]">
        <xsl:value-of select="concat('$tempdir/', ii:key, '.jpg ')"/>
      </xsl:for-each>
    </xsl:with-param>
  </xsl:call-template>
  <xsl:text>;
</xsl:text>
</xsl:template>

<d:para>
Quadratischen Ausschnitt bilden
</d:para>
<xsl:template match="ii:image" mode="crop">
  <xsl:call-template name="txt.replacelist">
    <xsl:with-param name="txt" select="$p_crop_cmd"/>
    <xsl:with-param name="list">
      <xsl:text>${imgid},</xsl:text>
      <xsl:value-of select="ii:key"/>
    </xsl:with-param>
  </xsl:call-template>
</xsl:template>

</xsl:stylesheet>
