<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>mogrify on Natenoms Blog</title><link>https://natenom.de/tags/mogrify/</link><description>Recent content in mogrify on Natenoms Blog</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright/><lastBuildDate>Fri, 30 Sep 2022 11:23:14 +0200</lastBuildDate><atom:link href="https://natenom.de/tags/mogrify/index.xml" rel="self" type="application/rss+xml"/><item><title>Bilder für Hugo automatisch korrekt ausrichten</title><link>https://natenom.de/2022/09/bilder-fuer-hugo-automatisch-korrekt-ausrichten/</link><pubDate>Fri, 30 Sep 2022 11:23:14 +0200</pubDate><guid>https://natenom.de/2022/09/bilder-fuer-hugo-automatisch-korrekt-ausrichten/</guid><description><![CDATA[<p>Hugo ignoriert beim Erstellen von Zwischengrößen von Bildern die Metadaten (Exif). Das führt dazu, dass Bilder auf der Seite liegen, die eigentlich hochkant fotografiert wurden. Dazu hatte ich bereits einen Blogbeitrag geschrieben, <a  href="/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/">siehe hier</a>.</p>
<p>Heute habe ich dafür mal ein Bash-Script erstellt, um in einem Verzeichnis rekursiv alle Bilder zu finden, in denen die Rotation nur in den Exif-Daten enthalten ist, die aber auf Dateiebene nicht ausgerichtet sind.</p>]]></description><content:encoded><![CDATA[<p>Hugo ignoriert beim Erstellen von Zwischengrößen von Bildern die Metadaten (Exif). Das führt dazu, dass Bilder auf der Seite liegen, die eigentlich hochkant fotografiert wurden. Dazu hatte ich bereits einen Blogbeitrag geschrieben, <a  href="/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/">siehe hier</a>.</p>
<p>Heute habe ich dafür mal ein Bash-Script erstellt, um in einem Verzeichnis rekursiv alle Bilder zu finden, in denen die Rotation nur in den Exif-Daten enthalten ist, die aber auf Dateiebene nicht ausgerichtet sind.</p>
<p>Diese Dateien werden dann mit dem Tool <code>mogrify</code> korrekt ausgerichtet, die Orientierung aus Exif entfernt und die Dateien gespeichert. <code>mogrify</code> ist im Paket ImageMagick enthalten.</p>

<h2 id="das-script" data-numberify>Das Script<a class="anchor ms-1" href="#das-script"></a></h2>
<p>Da ich es bevorzuge, dass mir ein Script mitteilt, was es tut, gibt es eine Ausgabe für jede Datei, ob es Exifdaten zur Rotation gibt. Damit das besser lesbar ist, werden Zeilen ohne Match eingerückt.</p>
<p>Hier das Shell-Script (Bash):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>SEARCH_IN_PATH<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>1<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>cd <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>SEARCH_IN_PATH<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>shopt -s globstar
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> file in **/*; <span style="color:#66d9ef">do</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">#echo &#34;${file}&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> -f <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>        filename<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>basename <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>        extension<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>filename##*.<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> <span style="color:#e6db74">${</span>extension<span style="color:#e6db74">}</span> <span style="color:#f92672">=</span>~ <span style="color:#f92672">(</span>webp|gif|jpg|jpeg|png<span style="color:#f92672">)</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>            exiftool <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> | grep <span style="color:#e6db74">&#34;^Orientation&#34;</span> | grep <span style="color:#e6db74">&#34;Rotate&#34;</span> &gt;/dev/null
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> $? <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>                echo <span style="color:#e6db74">&#34;Image found, mogrifiy: </span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>                mogrify -auto-orient <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>                echo -e <span style="color:#e6db74">&#34;\tNo exif orientation: </span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span>
</span></span></code></pre></div><div class="shortcode-codewarning">
    <details>
    <summary class="shortcode-codewarning summary">Vorsicht beim Ausführen von Shellkommandos via Copy & Paste</summary>
        <div class="shortcode-codewarning content"><p>
        Man sollte Shellkommandos aus Anleitungen, die in einem Browser angezeigt werden, grundsätzlich nicht einfach ungeprüft in die Shell einfügen und ausführen.</p>
        <p>Denn es ist möglich, Teile des Codes z. B. via CSS zu verstecken. Diese Teile werden aber trotzdem kopiert und landen auch in der Shell, wo sie ausgeführt werden.</p>
        <p>Besser ist es, die Kommandos erst in einen lokalen Texteditor einzufügen und dort zu prüfen, bevor man die ausführt.<p>
        <p>Kopiere doch mal dieses Beispiel und füge es – in die Shell (!NEIN) – in einen Editor ein:</p>
        <p><code>echo "Befehl 1"; <span class="shortcode-codewarning hidden">echo "Befehl 2. Im Browser unsichtbar, da font-size per CSS auf 0 gestellt wurde. Hier könnte z. B. die Festplatte gelöscht oder andere Dummheiten gemacht werden."; </span>echo "Befehl 3"</code></p></div>
    </details>
</div>

<h2 id="für-alte-blogbeiträge" data-numberify>Für alte Blogbeiträge<a class="anchor ms-1" href="#für-alte-blogbeiträge"></a></h2>
<p>Somit reicht ein Aufruf auf der Konsole, um alle Bilder in meinem Blog zu &ldquo;reparieren&rdquo;.</p>
<p>Beispielaufruf für meinen Blog</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ hugo_find_fix_orientation.sh blog/posts/2022/2022-09-01-fotos-der-letzten-tage/
</span></span><span style="display:flex;"><span>        No exif orientation: cover.jpg
</span></span><span style="display:flex;"><span>Image found, mogrifiy: images/2022-01-19-hachelallee-1.jpg
</span></span><span style="display:flex;"><span>        No exif orientation: images/2022-01-19-hachelallee-2.jpg
</span></span><span style="display:flex;"><span>        No exif orientation: images/2022-01-fahrrad-zob-pforzheim.jpg
</span></span><span style="display:flex;"><span>        No exif orientation: images/2022-01-schwann-radstation.jpg
</span></span><span style="display:flex;"><span>        No exif orientation: images/2022-01-wald-mit-sonne.jpg
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>…<span style="color:#f92672">]</span>
</span></span></code></pre></div><p>Insgesamt 25 Dateien wurden so gefunden und korrekt ausgerichtet.</p>
<p>Beim nächsten Rendern des Blogs erkennt Hugo die geänderten Bilddateien und erstellt dann automatisch neue Zwischengrößen daraus.</p>

<h2 id="für-neue-blogbeiträge" data-numberify>Für neue Blogbeiträge<a class="anchor ms-1" href="#für-neue-blogbeiträge"></a></h2>
<p>Das Script kann ich jetzt auch verwenden, um Bilder neuer Blogbeiträge automatisch korrekt auszurichten. Sobald ein Blogbeitrag fertig ist, lasse ich das Script einmalig über das <code>Page Bundle</code> laufen.</p>]]></content:encoded></item><item><title>Falsch gedrehte Bilder in Hugo durch Verwendung von Funktionen zur Bildbearbeitung</title><link>https://natenom.de/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/</link><pubDate>Sun, 11 Sep 2022 20:11:13 +0200</pubDate><guid>https://natenom.de/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/</guid><description>&lt;p>Mir ist er vor ein paar Tagen aufgefallen, dass die im Blog generierten kleinen Varianten der Bilder manchmal liegend dargestellt werden, obwohl sie hochkant dargestellt werden müssten, wohingegen die Originalbilder richtig dargestellt werden. So wie in diesem Screenshot im zweiten Bild der Galerie zu sehen ist:&lt;/p></description><content:encoded><![CDATA[<p>Mir ist er vor ein paar Tagen aufgefallen, dass die im Blog generierten kleinen Varianten der Bilder manchmal liegend dargestellt werden, obwohl sie hochkant dargestellt werden müssten, wohingegen die Originalbilder richtig dargestellt werden. So wie in diesem Screenshot im zweiten Bild der Galerie zu sehen ist:</p>
 <figure class="image-caption"><a href="2022-09-11-screenshot-blog-mit-falsch-gedrehtem-bild-cover.webp"><picture><source type="webp" srcset="/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/_hu47beb127d72f88a20168161fa192f622_160470_ec904d8d615b29188206bd6e54937bf7.webp" />
			         <img alt="Screenshot eines Blogbeitrags mit einer Galerie, in der ein Bild auf der Seite liegt statt hochkant dargestellt zu werden." src="/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/_hu47beb127d72f88a20168161fa192f622_160470_ec904d8d615b29188206bd6e54937bf7.webp" title="" width="350" height="435" loading="lazy" /></picture></a><figcaption>Blogbeitrag mit falsch gedrehtem Bild. <a  href="/2022/04/fotos-fahrradtour-28-04-2022/">Hier der Blogbeitrag</a>.</figcaption></figure>
<p>Das liegt scheinbar daran, dass in den Metadaten (<a  href="/tags/exif/">Exif</a>) mancher Fotos die Rotation hinterlegt ist, das Bild selbst jedoch nicht &ldquo;richtig&rdquo; ausgerichtet gespeichert wurde.</p>
<div class="shortcode-notice update">
    <div class="shortcode-notice-title update">
        Update</div>
    <div class="notice-content">2022-09-30: Ich habe ein Script geschrieben, das solche Dateien findet und die Ausrichtung korrigiert, <a  href="/2022/09/bilder-fuer-hugo-automatisch-korrekt-ausrichten/">siehe hier</a>.</div>
</div>



<h2 id="hintergrund" data-numberify>Hintergrund<a class="anchor ms-1" href="#hintergrund"></a></h2>
<p>Hugo beachtet vorhandene Exif-Daten nicht und erstellt deshalb mit z. B. der <code>.Resize</code>-Funktion Bilder mit falscher Ausrichtung. Diese Funktion wird in meinem Blog und auch in meinem Wiki genutzt, um automatisch kleine Varianten großer Bilder zu erstellen, <a  href="/2022/04/verbesserungen-des-render-hooks-fuer-bilder-und-im-wiki/">siehe hier</a>. Vermutlich passiert das selbe auch bei Verwendung von <code>Fit</code>, <code>Fill</code>, <code>Crop</code> und <code>Filter</code>. (<a  class='urlextern'  href="https://gohugo.io/content-management/image-processing/#resize">Hier die Dokumentation dieser Funktionen</a>.)</p>
<p>Das ist ein bekanntes &ldquo;Problem&rdquo; in Hugo. Details <a  class='urlextern'  href="https://discourse.gohugo.io/t/image-resize-rotates-image/28438/2">siehe hier</a>.</p>
<p>Einen offenen Issue <a  class='urlextern'  href="https://github.com/gohugoio/hugo/issues/5181">gibt es hier</a>.</p>
<p>Nicht alle Bilder im Blog sind davon betroffen. Kommt vermutlich auf die verarbeitende Software oder auf das Kameramodell usw. an.</p>

<h2 id="zwei-lösungen" data-numberify>Zwei Lösungen<a class="anchor ms-1" href="#zwei-lösungen"></a></h2>

<h3 id="lösung-1--anpassung-in-hugo" data-numberify>Lösung 1 – Anpassung in Hugo<a class="anchor ms-1" href="#lösung-1--anpassung-in-hugo"></a></h3>
<p>Eine Lösung ist, viel Arbeit in meinen <code>render-image</code>-Hook als auch in den <code>figure</code>-Shortcode zu stecken, sodass dort die Rotation ausgewertet und beachtet wird. Für beides verwende ich nicht die Originale sondern eigenen Varianten.</p>
<p>In hugo-shortcode-gallery wird das z. B. so gemacht, <a  class='urlextern'  href="https://github.com/mfg92/hugo-shortcode-gallery/blob/master/layouts/shortcodes/gallery.html#L110">siehe hier</a>.</p>

<h3 id="lösung-2--bilddateien-entsprechend-rotieren" data-numberify>Lösung 2 – Bilddateien entsprechend rotieren<a class="anchor ms-1" href="#lösung-2--bilddateien-entsprechend-rotieren"></a></h3>
<p>Eine weit einfachere Lösung ist, die Dateien direkt entsprechend der enthaltenen Metadaten zu rotieren und so abzuspeichern.</p>
<p>Das kann man z. B. mit <code>mogrify</code> (<a  class='urlextern'  href="https://imagemagick.org/script/mogrify.php">ImageMagick</a>) machen.</p>
<p>Für entsprechende Dateien führe ich also das hier aus, wobei die Originaldatei überschrieben wird:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mogrify -auto-orient pausenbaum.jpg
</span></span></code></pre></div><p>Damit wird die Info zur Rotation aus den Metadaten entfernt und das Bild &ldquo;richtig&rdquo; gedreht abgespeichert. Die Dokumentation dazu findet sich <a  class='urlextern'  href="https://imagemagick.org/script/command-line-options.php#auto-orient">hier</a>.</p>
<p>Man könnte noch ein Script schreiben, das alle Bilder findet, die Infos zur Rotation enthalten und diese dann in einem Schritt entsprechend drehen. Das spare ich mir, da ich das manuell mache, wenn ich mal wieder solche Fotos im Blog sehe.</p>

<h2 id="passt" data-numberify>Passt<a class="anchor ms-1" href="#passt"></a></h2>
<p>Und dann ist das Foto im Blog wieder richtig gedreht:</p>
 <figure class="image-caption"><a href="2022-09-11-screenshot-blog-mit-richtig-gedrehtem-bild-cover.webp"><picture><source type="webp" srcset="/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/2022-09-11-screenshot-blog-mit-richtig-gedrehtem-bild-cover.webp" />
			         <img alt="Screenshot eines Blogbeitrags mit einer Galerie, in der ein Bild auf der Seite liegt statt hochkant dargestellt zu werden." src="/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/2022-09-11-screenshot-blog-mit-richtig-gedrehtem-bild-cover.webp" title="" width="799" height="993" loading="lazy" /></picture></a><figcaption>Blogbeitrag mit richtig gedrehtem Bild. <a  href="/2022/04/fotos-fahrradtour-28-04-2022/">Hier der Blogbeitrag</a>.</figcaption></figure>
<p>Falls jemand einen Blogbeitrag mit falsch gedrehten Bildern findet, würde ich mich über einen Hinweis darauf freuen. Danke.</p>]]></content:encoded><enclosure url="https://natenom.de/2022/09/falsch-gedrehte-bilder-in-hugo-durch-verwendung-von-funktionen-zur-bildbearbeitung/2022-09-11-screenshot-blog-mit-falsch-gedrehtem-bild-cover.webp" length="160470" type="image/webp"/></item></channel></rss>