Ich muss immer wieder eine automatisierte Bearbeitung von Bilddateien machen. Dabei sind die Anforderungen einfach:

  • Verkleinern (meist Bilder von Handys)
  • Ausschneiden
  • Drehen

Ich habe das auf dem Server unter Debian-Linux bisher mit Imagemagick gemacht. Das ist ein Kommandozeilenprogramm das ein paar Programme wie convert und mogrify bietet mit denen man so etwas machen kann. Beispiel:

mogrify -filter Triangle -define filter:support=2 \
  -thumbnail 90 -unsharp 0.25x0.25+8+0.065 \
  -dither None -posterize 136 -quality 90 \
  -define jpeg:fancy-upsampling=off \
  -interlace none -colorspace sRGB -strip \
  -geometry 520x614+226+221 \
  /var/.../diedatei.jpg

Mit den Parameter kann man halt alles mögliche am Konvertierungsvorgang einstellen. Aber der Parameter geometry ist ein Biest. Ich habe schon Stunden damit verbracht "irgendwie" zu einem richtigen Ergebnis zu bekommen um es dann in meinen Programm zu verwenden.

Das Frontend

So sieht ein typisches Frontend zum Beschneiden von Bilder aus:

Nach stundenlangen Rumprobieren wegen der Parameter habe ich es nicht geschafft die richtigen Parameter zu finden (x/y vertauscht, wo ist der Ursprungspunkt des Koordinatensystems etc. etc.). Mir hat's gereicht, ich wollte eine Alternative finden.

Alternative econvert

Das Kommandozeilenprogramm econvert ist

  • kostenlos
  • gibt es als Debianpaket (apt-get install exactimage)
  • hat nicht jahrzehntealten Ballast auf der Kommandozeile aufgeladen
  • bietet eine Art Pipeline über die Kommandozeile
  • gibt es als Perlmodul (nicht im CPAN, warum?) für Debian (apt-get install libexactimage-perl) - habe ich noch nicht ausprobiert

Es wurde von der Berliner Firma Exactcode geschrieben: https://exactcode.com/opensource/exactimage

Beispiel

Weniger Arbeit

Meine Frontend liefern leider manchmal unschöne Daten für die Kordinaten der Beschneidung, dann sind die Bilder verdreht, manchmal gespiegelt. Man kann das ganz wunderbar ausgleichen durch nacheinanderfolgende Befehle auf der Kommandozeile. Der Bildkörper wird also durch eine Art Pipeline geführt, am Ende kommt das Ergebnis raus.

Ein Beispiel dazu: