ubuntuusers.de

Imagemagick convert Syntax Problem

Status: Gelöst | Ubuntu-Version: Xubuntu 20.04 (Focal Fossa)
Antworten |

glaskugel

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3614

ImageMagick 6.9.10-23 Q16 x86_64 20190101

gs --version 9.50

HEADLINE=Test
DATUM=2020
$ convert -background none -fill Moccasin -size 3840x2160 -font /usr/share/fonts/myttf/andybol_.ttf -pointsize 144 -gravity center label:" $HEADLINE \n\n $DATUM "/tmp/label.png

convert-im6.q16: no images defined `label: Test \n\n 2020 /tmp/label.png' @ error/convert.c/ConvertImageCommand/3258.

Dieser convert-Befehl hatte vor langer Zeit schon mal in einem Script funktioniert.

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3614

https://imagemagick.org/script/convert.php

Diese Beispiele dort funktionieren auch alle nicht, zB:

$ magick convert -size 320x85 canvas:none -font Bookman-DemiItalic -pointsize 72 \
>   -draw "text 25,60 \'Magick\'" -channel RGBA -blur 0x6 -fill darkred -stroke magenta \
>   -draw "text 20,55 \'Magick\'" fuzzy-magick.png

Der Befehl 'magick' wurde nicht gefunden, meinten Sie:

  Befehl 'magic' aus dem deb magic (8.2.157+ds.1-1)

Versuche: sudo apt install <deb name>

Was hat es mit diesem magick auf sich? Einfache Befehle mit convert funktionieren.

aptitude search magick | grep ^i
i  imagemagick - image manipulation programs -- binaries
i A imagemagick-6-common - image manipulation programs -- infrastructure
i A imagemagick-6.q16 - image manipulation programs -- quantum depth Q16
i A libgraphics-magick-perl - format-independent image processing - perl interface
i A libgraphicsmagick++-q16-12 - format-independent image processing - C++ shared library
i A libgraphicsmagick-q16-3 - format-independent image processing - C shared library
i A libimage-magick-perl - Perl interface to the ImageMagick graphics routines
i A libimage-magick-q16-perl - Perl interface to the ImageMagick graphics routines -- Q16 version
i A libmagick++-6.q16-8 - C++ interface to ImageMagick -- quantum depth Q16
i A libmagickcore-6.q16-6 - low-level image manipulation library -- quantum depth Q16
i A libmagickcore-6.q16-6-extra - low-level image manipulation library - extra codecs (Q16)
i A libmagickwand-6.q16-6 - image manipulation library -- quantum depth Q16

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6479

Wohnort: Hamburg

Was hat es mit diesem magick auf sich?

Keine Ahnung. Das höre ich zum ersten Mal. Mein System System sagt dazu:

manfred@samurai:~$ apropos magick
conjure (1)          - interprets and executes scripts written in the Magick Scripting Language (MSL).
conjure-im6 (1)      - interprets and executes scripts written in the Magick Scripting Language (MSL).
conjure-im6.q16 (1)  - interprets and executes scripts written in the Magick Scripting Language (MSL).
Image::ExifTool::MIFF (3pm) - Read Magick Image File Format meta information

Mit "label:" kann ich momentan auch nichts anfangen. Wegen der doch recht umfangreichen Parametersammlung habe ich mir vor langer Zeit mal ein Frontend für eine häufig benötigte Aufgabe geschrieben. Dort finde ich jetzt folgenden Hinweis:

**  Hinweis: Zum anbringen der Texte im Bild wird hier -annotate
**    benutzt, da -draw text keine Zeilenwechsel "\n" im Eingabetext
**    erlaubt.
*/

Könnten die Zeilenwechsel bei dir auch Problem sein?

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3614

Bei mir hat das ziemlich sicher bis 18.04 alles funktioniert, könnte sein, dass nach irgendeinem Update unter 18.4 nicht mehr funktionierte, 19,10 gab es sicher ein Problem, das installierte ich aber damals nur vorübergehend um mit meiner neuen Hardware für ein paar Monate klar zu kommen.

Interessant ist ja, dass das Beispiel von der IM-Seite unter 20.04 nicht funktioniert. Dann braucht man sich keine Gedanken über meine Syntax machen. Bei mir könnte es eine Frage der Reihenfolge sein.

Könnten die Zeilenwechsel bei dir auch Problem sein?

Kannst du ja gerne testweise weglassen.

convert -background none -fill Moccasin -size 3840x2160

Das führt auch schon zu Problemen.

Ich wüsste auch nicht, was in der Policy nicht freigeschaltet ist.

# cat /etc/ImageMagick-6/policy.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
  <!ELEMENT policymap (policy)+>
  <!ATTLIST policymap xmlns CDATA #FIXED ''>
  <!ELEMENT policy EMPTY>
  <!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED
    name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
    stealth NMTOKEN #IMPLIED value CDATA #IMPLIED>
]>
<!--
  Configure ImageMagick policies.

  Domains include system, delegate, coder, filter, path, or resource.

  Rights include none, read, write, execute and all.  Use | to combine them,
  for example: "read | write" to permit read from, or write to, a path.

  Use a glob expression as a pattern.

  Suppose we do not want users to process MPEG video images:

    <policy domain="delegate" rights="none" pattern="mpeg:decode" />

  Here we do not want users reading images from HTTP:

    <policy domain="coder" rights="none" pattern="HTTP" />

  The /repository file system is restricted to read only.  We use a glob
  expression to match all paths that start with /repository:

    <policy domain="path" rights="read" pattern="/repository/*" />

  Lets prevent users from executing any image filters:

    <policy domain="filter" rights="none" pattern="*" />

  Any large image is cached to disk rather than memory:

    <policy domain="resource" name="area" value="1GP"/>

  Define arguments for the memory, map, area, width, height and disk resources
  with SI prefixes (.e.g 100MB).  In addition, resource policies are maximums
  for each instance of ImageMagick (e.g. policy memory limit 1GB, -limit 2GB
  exceeds policy maximum so memory limit is 1GB).

  Rules are processed in order.  Here we want to restrict ImageMagick to only
  read or write a small subset of proven web-safe image types:

    <policy domain="delegate" rights="none" pattern="*" />
    <policy domain="filter" rights="none" pattern="*" />
    <policy domain="coder" rights="none" pattern="*" />
    <policy domain="coder" rights="read|write" pattern="{GIF,JPEG,PNG,WEBP}" />
-->
<policymap>
  <!-- <policy domain="system" name="shred" value="2"/> -->
  <!-- <policy domain="system" name="precision" value="6"/> -->
  <!-- <policy domain="system" name="memory-map" value="anonymous"/> -->
  <!-- <policy domain="system" name="max-memory-request" value="256MiB"/> -->
  <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
  <policy domain="resource" name="memory" value="256MiB"/>
  <policy domain="resource" name="map" value="512MiB"/>
  <policy domain="resource" name="width" value="16KP"/>
  <policy domain="resource" name="height" value="16KP"/>
  <!-- <policy domain="resource" name="list-length" value="128"/> -->
  <policy domain="resource" name="area" value="128MB"/>
  <policy domain="resource" name="disk" value="1GiB"/>
  <!-- <policy domain="resource" name="file" value="768"/> -->
  <!-- <policy domain="resource" name="thread" value="4"/> -->
  <!-- <policy domain="resource" name="throttle" value="0"/> -->
  <!-- <policy domain="resource" name="time" value="3600"/> -->
  <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
  <!-- <policy domain="module" rights="none" pattern="{PS,PDF,XPS}" /> -->
  <!-- <policy domain="delegate" rights="none" pattern="HTTPS" /> -->
  <!-- <policy domain="path" rights="none" pattern="@*" /> -->
  <!-- <policy domain="cache" name="memory-map" value="anonymous"/> -->
  <!-- <policy domain="cache" name="synchronize" value="True"/> -->
  <!-- <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/> -->
  <!-- <policy domain="system" name="pixel-cache-memory" value="anonymous"/> -->
  <!-- <policy domain="system" name="shred" value="2"/> -->
  <!-- <policy domain="system" name="precision" value="6"/> -->
  <!-- not needed due to the need to use explicitly by mvg: -->
  <!-- <policy domain="delegate" rights="none" pattern="MVG" /> -->
  <!-- use curl -->
  <policy domain="delegate" rights="none" pattern="URL" />
  <policy domain="delegate" rights="none" pattern="HTTPS" />
  <policy domain="delegate" rights="none" pattern="HTTP" />
  <!-- in order to avoid to get image with password text -->
  <policy domain="path" rights="none" pattern="@*"/>
  <!-- disable ghostscript format types -->
  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="PS2" />
  <policy domain="coder" rights="none" pattern="PS3" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="read | write" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />
</policymap>

PS: andere komplexe convert-Befehle funktionieren bei mir weiterhin.

Kelhim

Avatar von Kelhim

Anmeldungsdatum:
18. September 2006

Beiträge: 3642

Wohnort: Köln

Den magick-Befehl gibt es erst ab Version 7, auf die sich auch die offizielle Website bezieht – du verwendest aber Version 6. Dies nur zur Erklärung, warum der magick-Befehl nicht gefunden wird.

Ist der convert-Befehl mit -debug gesprächiger?

manuel-werner

Anmeldungsdatum:
17. Dezember 2014

Beiträge: 168

Wohnort: Ludwigshafen am Rhein

Ich kann auch empfehlen das man Converseen installiert. Das ist eine GUI für Imagemagick. Damit wird die Bedienung erleichtert.

https://wiki.ubuntuusers.de/Converseen/

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3614

Danke, aber GUI hilft mir nicht, brauche es in einem Script.

Ist der convert-Befehl mit -debug gesprächiger?

Mal ganz was einfaches:

convert -debug -background none -fill Moccasin -size 3840x2160 /tmp/test.png
convert-im6.q16: unrecognized event type `-background' @ error/convert.c/ConvertImageCommand/1225.
onvert -debug -background none -fill Moccasin -size 3840x2160 -font /usr/share/fonts/myttf/andybol_.ttf -pointsize 144 -gravity center label:" Test \n\n 2020 "/tmp/label.png
convert-im6.q16: unrecognized event type `-background' @ error/convert.c/ConvertImageCommand/1225.

http://www.imagemagick.org/Usage/backgrounds/ Von da hatte ich mir mal meine Syntax zusammengebastelt und das dann funktioiert hatte.

Kelhim

Avatar von Kelhim

Anmeldungsdatum:
18. September 2006

Beiträge: 3642

Wohnort: Köln

Probier bitte einmal folgenden Befehl:

convert -debug "All" -background none -fill Moccasin -size 3840x2160 /tmp/test.png 

Man muss -debug noch die zu untersuchenden Events mitteilen,

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3614

$ convert -debug "All" -background none -fill Moccasin -size 3840x2160 /tmp/test.png

2020-09-13T14:32:07+02:00 0:00.000 0.000u 6.9.10 Configure convert-im6.q16[6033]: utility.c/ExpandFilenames/954/Configure
  Command line: convert {-debug} {All} {-background} {none} {-fill} {Moccasin} {-size} {3840x2160} {/tmp/test.png}
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: configure.c/GetConfigureOptions/685/Configure
  Searching for configure file: "/usr/share/ImageMagick-6/colors.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: configure.c/GetConfigureOptions/685/Configure
  Searching for configure file: "/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.10//config-Q16/colors.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: configure.c/GetConfigureOptions/685/Configure
  Searching for configure file: "/etc/ImageMagick-6/colors.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: configure.c/GetConfigureOptions/685/Configure
  Searching for configure file: "/usr/share/doc/imagemagick-6-common/htmlcolors.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: configure.c/GetConfigureOptions/685/Configure
  Searching for configure file: "~/.config/ImageMagick/colors.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: configure.c/GetConfigureOptions/685/Configure
  Searching for configure file: "~/.magick/colors.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: color.c/LoadColorCache/2251/Configure
  Loading color file "/etc/ImageMagick-6/colors.xml" ...
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "/usr/share/ImageMagick-6/locale.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.10//config-Q16/locale.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "/etc/ImageMagick-6/locale.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "/usr/share/doc/imagemagick-6-common/htmllocale.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "~/.config/ImageMagick/locale.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "~/.magick/locale.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: locale.c/LoadLocaleCache/1209/Configure
  Loading locale configure file "/usr/share/ImageMagick-6/locale.xml" ...
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "/usr/share/ImageMagick-6/english.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.10//config-Q16/english.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "/etc/ImageMagick-6/english.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "/usr/share/doc/imagemagick-6-common/htmlenglish.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "~/.config/ImageMagick/english.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Locale convert-im6.q16[6033]: locale.c/GetLocaleOptions/856/Locale
  Searching for locale file: "~/.magick/english.xml"
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Configure convert-im6.q16[6033]: locale.c/LoadLocaleCache/1209/Configure
  Loading locale configure file "/usr/share/ImageMagick-6/english.xml" ...
2020-09-13T14:32:07+02:00 0:00.010 0.000u 6.9.10 Exception convert-im6.q16[6033]: convert.c/ConvertImageCommand/3258/Exception
  no images defined `/tmp/test.png'
convert-im6.q16: no images defined `/tmp/test.png' @ error/convert.c/ConvertImageCommand/3258.

PS: Kann sein, dass ich für längere Zeit (1 Woche?) kein Internet habe. Daher kann eine Antwort länger dauern.

alterpinguin

Anmeldungsdatum:
24. Mai 2014

Beiträge: 786

glaskugel schrieb:

ImageMagick 6.9.10-23 Q16 x86_64 20190101

gs --version 9.50

HEADLINE=Test
DATUM=2020
$ convert -background none -fill Moccasin -size 3840x2160 -font /usr/share/fonts/myttf/andybol_.ttf -pointsize 144 -gravity center label:" $HEADLINE \n\n $DATUM "/tmp/label.png

convert-im6.q16: no images defined `label: Test \n\n 2020 /tmp/label.png' @ error/convert.c/ConvertImageCommand/3258.

Dieser convert-Befehl hatte vor langer Zeit schon mal in einem Script funktioniert.

also bei mir funktioniert unter LUbuntu-18.04 dieser Befehl:

convert -background none -fill Moccasin -size 3840x2160 -font /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf -pointsize 144 -gravity center label:" $HEADLINE \n\n $DATUM " /tmp/label.png

mit vorbesetzten env-Daten und

Dein Beispiel funktioniert bei mir auch nicht, denn da fehlt ein Leerzeichen und dann kommt auch bei mir der Fehler: "convert-im6.q16: no images defined label: Test \n\n 2020 /tmp/label.png' @ error/convert.c/ConvertImageCommand/3258. "

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3614

Also wenn ich deinen Befehl in eine Konsole kopiere, dann erhalte ich wieder:

convert-im6.q16: unable to read font `/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf' @ warning/annotate.c/RenderType/915.

Wo meinst du genau, dass ein Leerzeichen fehlt. Wenn ich den Font tausche, dann ist mein Original-Befehl und deiner ident, also kein Unterschied bei den Leerzeichen.

Was hast du mit env vorangestellt? Mit ist nicht klar warum das sein muss?

alterpinguin

Anmeldungsdatum:
24. Mai 2014

Beiträge: 786

glaskugel schrieb:

Also wenn ich deinen Befehl in eine Konsole kopiere, dann erhalte ich wieder:

convert-im6.q16: unable to read font `/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf' @ warning/annotate.c/RenderType/915.

Wo meinst du genau, dass ein Leerzeichen fehlt. Wenn ich den Font tausche, dann ist mein Original-Befehl und deiner ident, also kein Unterschied bei den Leerzeichen.

Was hast du mit env vorangestellt? Mit ist nicht klar warum das sein muss?

Willst Du mich auf den Arm nehmen? Bitte sieh Dir doch genau an was da steht und nimm zur Kenntnis, dass schon ein einziges fehlerhaftes Zeichen bei einer Befehlszeile zu einem Fehler führen kann oder sogar vieles kaputt machen kann. Das ist kein Witz, das ist eine ernst gemeinte Warnung.

Was Dein Test mit meiner (bei mir funktionierenden) Befehlszeile betrifft, so könnte Dir auffallen, dass ich im Vergleich zu Deiner auch einen anderen "font" angegeben habe, da ich nicht genau den scheinbar bei Dir installierten "font" habe. Davon unabhängig ist aber bei meiner Befehlszeile ein Leerzeichen an der richtigen Stelle und bei Dir wird mit dem "einfache cut+copy" zumindest dann der Fehler auf den bei Dir fehlenden "font" ausgegeben. D.h. Du solltest da natürlich den "font" nutzen, der bei Dir vorhanden ist.

Und was ist wohl "env"? Das ist der Befehl, der die gesetzten Werte in der "Umgebung(environment der shell)" ausgibt und bei Deinem Beispiel besetzt Du doch da 2 Werte vor, die in der Befehlszeile genutzt werden. Hattest Du das bisher nicht verstanden?

Kelhim

Avatar von Kelhim

Anmeldungsdatum:
18. September 2006

Beiträge: 3642

Wohnort: Köln

glaskugel schrieb:

Also wenn ich deinen Befehl in eine Konsole kopiere, dann erhalte ich wieder:

convert-im6.q16: unable to read font `/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf' @ warning/annotate.c/RenderType/915.

Wo meinst du genau, dass ein Leerzeichen fehlt. Wenn ich den Font tausche, dann ist mein Original-Befehl und deiner ident, also kein Unterschied bei den Leerzeichen.

Was hast du mit env vorangestellt? Mit ist nicht klar warum das sein muss?

alterpinguin hat nicht nur das fehlende Leerzeichen hinzugefügt, sondern auch einen anderen Font im Befehl angegeben, weil es mit deinem Font bei ihm nicht funltioniert hätte. Bei dir müsste der Befehl wohl so aussehen:

convert -background none -fill Moccasin -size 3840x2160 -font /usr/share/fonts/myttf/andybol_.ttf -pointsize 144 -gravity center label:" $HEADLINE \n\n $DATUM " /tmp/label.png 

Das Leerzeichen habe ich hervorgehoben.

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3614

Vielen Dank, mit dem Leerzeichen funktioniert mein ursprünglicher Befehl mit dem anderen Font auch, dh keine Fehlermerlung, kann durchaus sein, dass ich den Font dazu installiert habe. Ich setze mal auf gelöst und muss aber erst testen, ob es in Folge noch andere Probleme bei meinen IM-Befehlen gibt.

Antworten |