Python und Imagemagick als subprocess

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mleopold
User
Beiträge: 15
Registriert: Dienstag 4. Juni 2013, 16:05

Hallo,

ich habe ein seltsames Problem beim Aufruf per subprocess von convert imagemagick/convert festgestellt und im imagemagick-Forum gepostet.

http://www.imagemagick.org/discourse-se ... =1&t=30379

So richtig konnte sich das dort keiner erklären und ich stehe wirklich vor einem Rätsel: Es muss irgendetwas stattfinden, das die Funktionalität von convert radikal ändert, wenn es von Windows aus aufgerufen wird. Ich habe allerdings auch keine convert-Option gefunden, die diesen Effekt auslösen und die bei der Transformation des Aufrufs entstehen könnte.

Zur Erläuterung der Notation (hier der Windowsaufruf):

Code: Alles auswählen

convert -trim -resize 512x512^> in.jpg out.jpg
-resize 512x512 rechnet ein Bild so um, dass es unter Beibehaltung der Ratio eine maximale Kantenlänge von 512 erhält. Der Operator > dahinter verhindert, dass Bilder, die kleiner sind, größer gemacht werden. Das Problem tritt nur dann auf, wenn ">" steht und nur unter Windows auf. Der Effekt ist der, dass aus dem maximal unter Windows ein minimal wird. Ich habe allerdings keinen entsprechenden Parameter von convert gefunden. Hat jemand eine Idee? Danke.
BlackJack

@mleopold: Was bedeutet denn das ^ und warum benutzt Du das beim Aufruf unter Windows und nicht beim Aufruf unter Linux? Warum unter Linux '\>' obwohl Du gar nicht über die Shell gehst, `convert` also hier auch den Backslash tatsächlich im Argument hat. Warum überhaupt zwei verschiedene Aufrufe für Windows und Linux? Da sollte unabhängig vom Betriebssystem der gleiche Code ausgeführt werden. Wenn `convert` nicht im Suchpfad für ausführbare Dateien liegt, dann würde ich den Pfad dorthin als Konstante oder Konfigurationswert/Option ausserhalb der Funktion festlegen.
mleopold
User
Beiträge: 15
Registriert: Dienstag 4. Juni 2013, 16:05

Das war tatsächlich die Lösung. Python escaped das wahscheinlich zu ^^> und dann kommt was seltsames raus.

Das mit dem Aufruf von "convert" ist seltsam. Es ist eingetragen im Pfad ausführbarer Dateien und klappt problemlos von Konsole aus, allerdings gibt es Probleme beim Aufruf via subprocess. Dann wird irgendein Windows-internes Programm oder ein Windows-interner Befehl aufgerufen, der eben über Shell nicht erscheint.
BlackJack

@mleopold: Python escaped nichts zu '^^>'. Was denn überhaupt? Das ^ ist da schlicht falsch, denn das sorgt genau für das Verhalten was Du nicht haben willst. Und bei Linux hast Du das ^ nicht angegeben und deshalb auch nicht das ungewünschte Verhalten. Lies einfach mal in der ImageMagick-Dokumentation nach was das bedeutet.

Was `convert` und des Suchpfad angeht: Der kann für verschiedene Programme unterschiedlich sein. Wie auch immer Du das Python-Programm ausführst: Dort kann %PATH% anders aussehen und deshalb ein anderes ``convert.exe`` finden. Das wäre dann ein Problem der Konfiguration des Systems und nicht eines von Python.
Antworten