ubuntuusers.de

convert aus ImageMagick verhält sich anders

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 16.04 (Xenial Xerus)
Antworten |

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2503

In ’ner VM mit frischem Ubuntu 16.04 kann ich das Problem auch nicht nachstellen … ☹

Um mal ein paar Fehlerquellen auszuschließen: Wenn du das SVG aus dem Thread drüben (http://www.imagemagick.org/discourse-server/viewtopic.php?t=28152#p124535) nimmst und dann auch die „blocky.png“ generieren lässt mit folgendem Befehl, welches Ergebnis erhältst du?

convert -verbose -background None watermark.svg blocky.png

Sowohl Ausgabe des Befehls als auch die Datei wären interessant.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17576

Wohnort: Berlin

TausB schrieb:

Ich nutze ein Skript zur automatischen Bearbeitung von Covern/Poster. Dabei werden 2*.svg skaliert und auf ein *.jpg gebracht. Folgender Befehl lief unter Unbuntu 14.04 fehlerfrei und brachte das gewünschte Ergebnis.

convert "${cover}.alt" -background transparent \
\( "$logo_pfad/$fsk_logo" -resize ${fsk_logo_height} \) -geometry +0+$((${cover_height} - ${fsk_logo_height}))  -composite \
\( "$logo_pfad/$quali_logo" -resize x${quali_logo_height} \) -geometry +${fsk_logo_height}+$((${cover_height} - ${quali_logo_height}))  -composite \
JPEG:"${cover}"

Das sieht ja wie ein Teil eines Scripts aus, das wohl die height-Werte usw. selbst ermittelt. Kannst Du das ganze Script posten?

TausB

(Themenstarter)
Avatar von TausB

Anmeldungsdatum:
26. November 2009

Beiträge: 1564

Wohnort: Terra incognita

Vain schrieb:

In ’ner VM mit frischem Ubuntu 16.04 kann ich das Problem auch nicht nachstellen … ☹

Hat UbuntuMate evtl. eine andere imagemagic-Version - welche hast Du?

  • Meine:

convert --version
Version: ImageMagick 6.8.9-9 Q16 x86_64 2016-06-01 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib

Um mal ein paar Fehlerquellen auszuschließen: Wenn du das SVG aus dem Thread drüben (http://www.imagemagick.org/discourse-server/viewtopic.php?t=28152#p124535) nimmst und dann auch die „blocky.png“ generieren lässt mit folgendem Befehl, welches Ergebnis erhältst du?

convert -verbose -background None watermark.svg blocky.png

Sowohl Ausgabe des Befehls als auch die Datei wären interessant.

Here we go:

  • Das png ist "blocky".

  • Terminalausgabe:

    "inkscape" "watermark.svg" --export-eps="/tmp/magick-3622c4FyJ1istVq2" --export-dpi="90,90" --export-background="rgb(0%,0%,0%)" --export-background-opacity="0" > "/tmp/magick-3622AqIx3eqk4jRH" 2>&1
    "gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" -g512x74  "-sOutputFile=/tmp/magick-3622sT_U6zynyuuL%d" "-f/tmp/magick-3622_jMzre9fgwW4" "-f/tmp/magick-3622MxhYe5pJuyoo"
    /tmp/magick-3622sT_U6zynyuuL1 PNG 512x74 512x74+0+0 8-bit sRGB 12.6KB 0.000u 0:00.000
    /tmp/magick-3622c4FyJ1istVq2 PNG 512x74 512x74+0+0 16-bit sRGB 12.6KB 0.000u 0:00.000
    watermark.svg=>/tmp/magick-3622c4FyJ1istVq2 PNG 512x74 512x74+0+0 16-bit sRGB 12.6KB 0.000u 0:00.000
    watermark.svg=>blocky.png PNG 512x74 512x74+0+0 8-bit sRGB 175c 7.64KB 0.010u 0:00.000
  • Fixversuch mit MSVG: als prefix:

    convert -verbose -background None MSVG:watermark.svg blocky2.png
    convert: not authorized `/tmp/magick-3777WhBRSpoiF8Rv' @ error/constitute.c/ReadImage/412.
    convert: no images defined `blocky2.png' @ error/convert.c/ConvertImageCommand/3210.

user_unknown schrieb:

Das sieht ja wie ein Teil eines Scripts aus, das wohl die height-Werte usw. selbst ermittelt. Kannst Du das ganze Script posten?

Könnte ich, aber wozu?. Das Problem lässt sich hervorragend auf das obige Beispiel reduzieren.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17576

Wohnort: Berlin

TausB schrieb:

user_unknown schrieb:

Das sieht ja wie ein Teil eines Scripts aus, das wohl die height-Werte usw. selbst ermittelt. Kannst Du das ganze Script posten?

Könnte ich, aber wozu?. Das Problem lässt sich hervorragend auf das obige Beispiel reduzieren.

Damit die, die Dir helfen wollen, und dazu das Beispiel nachvollziehen wollen, weniger Arbeit haben.

TausB

(Themenstarter)
Avatar von TausB

Anmeldungsdatum:
26. November 2009

Beiträge: 1564

Wohnort: Terra incognita

user_unknown schrieb:

TausB schrieb:

user_unknown schrieb:

Das sieht ja wie ein Teil eines Scripts aus, das wohl die height-Werte usw. selbst ermittelt. Kannst Du das ganze Script posten?

Könnte ich, aber wozu?. Das Problem lässt sich hervorragend auf das obige Beispiel reduzieren.

Damit die, die Dir helfen wollen, und dazu das Beispiel nachvollziehen wollen, weniger Arbeit haben.

Verstehe mich nicht falsch. Es ehrt jeden, der hilft, aber das Skript (welches unter 14.04 fehlerfrei lief) wirft mit Sicherheit mehr unnötige Fragen auf und ist daher nicht zielführend. Das obige vereinfachte Beispiel beschreibt exakt das Problem, das Skript verkompliziert es nur. Anbei noch das svg und die png aus obigen Beispiel.

watermark.svg (3.4 KiB)
Download watermark.svg
Bilder

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2503

Version ist bei mir identisch:

root@ubuntu1604lts:~# convert --version
Version: ImageMagick 6.8.9-9 Q16 x86_64 2016-06-01 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib

Für’s Protokoll mein Aufruf:

root@ubuntu1604lts:~# convert -verbose -background None watermark.svg blocky.png
"inkscape" "watermark.svg" --export-eps="/tmp/magick-28793WTis8lGIkQog" --export-dpi="90,90" --export-background="rgb(0%,0%,0%)" --export-background-opacity="0" > "/tmp/magick-28793eAuiO9pN0J6E" 2>&1
watermark.svg SVG 718x172 718x172+0+0 16-bit sRGB 3.47KB 0.020u 0:00.009
watermark.svg=>blocky.png SVG 718x172 718x172+0+0 16-bit sRGB 29.4KB 0.020u 0:00.020

Kein GhostScript dabei, wie die Jungs im anderen Thread auch schon bemerkt haben.

So, jetzt kommt der interessante Teil. Wenn ich mal nur diesen Inkscape-Aufruf, der da gemacht wird, reinhaue, dann sehe ich in der Datei, die STDOUT und STDERR auffängt, korrekterweise das:

root@ubuntu1604lts:~# cat /tmp/magick-28793eAuiO9pN0J6E 
The program 'inkscape' is currently not installed. You can install it by typing:
apt install inkscape

Isch ’abe gar keine Inkscape.

Wenn ich nun Inkscape nachinstalliere und den „convert“-Befehl nochmal reinhaue, erscheint das:

root@ubuntu1604lts:~# convert -verbose -background None watermark.svg blocky.png"inkscape" "watermark.svg" --export-eps="/tmp/magick-312274SpeUM3GLZ9l" --export-dpi="90,90" --export-background="rgb(0%,0%,0%)" --export-background-opacity="0" > "/tmp/magick-31227FZvlqAOPs90t" 2>&1
"gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" -g512x74  "-sOutputFile=/tmp/magick-31227pVLDONGArANU%d" "-f/tmp/magick-31227_4u9_l7F8NRL" "-f/tmp/magick-31227UnHouA9lp2VC"
/tmp/magick-31227pVLDONGArANU1 PNG 512x74 512x74+0+0 8-bit sRGB 12.6KB 0.000u 0:00.000
/tmp/magick-312274SpeUM3GLZ9l PNG 512x74 512x74+0+0 16-bit sRGB 12.6KB 0.000u 0:00.000
watermark.svg=>/tmp/magick-312274SpeUM3GLZ9l PNG 512x74 512x74+0+0 16-bit sRGB 12.6KB 0.000u 0:00.000
watermark.svg=>blocky.png PNG 512x74 512x74+0+0 8-bit sRGB 175c 7.64KB 0.000u 0:00.000

Nun ruft er auch bei mir GhostScript auf. Und, siehe da: Jetzt ist auch meine „blocky.png“ kaputt!

Die reine Tatsache, dass er den Umweg über Inkscape → GhostScript geht, scheint das Problem zu sein.

Jetzt ist natürlich interessant, warum er das denn überhaupt tut, wenn es ohne Inkscape doch genauso gut (vermutlich mit einem in ImageMagick eingebauten Konverter) geht. Ich mutmaße, dass Inkscape halt mehr kann und der eingebaute Konverter nur ein rudimentäres Feature-Set hat. Und kann man ihm diesen Umweg abgewöhnen?

ImageMagick besitzt wohl eine deutlich komplexere Konfiguration, als mir bisher bewusst war. Dein Problem solltest du lösen können, indem du ihm den Inkscape-Umweg abgewöhnst – das kannst du anscheinend unter „/etc/ImageMagick-6/delegates.xml“ tun. Such’ in der Datei mal nach „inkscape“. Wenn du die gefundene Zeile mal auskommentierst mit „<!-- ... -->“ (oder löschst), dann sollte das helfen. Danach sieht’s bei mir so aus:

root@ubuntu1604lts:~# convert -verbose -background None watermark.svg blocky.png
watermark.svg SVG 718x172 718x172+0+0 16-bit sRGB 3.47KB 0.010u 0:00.010
watermark.svg=>blocky.png SVG 718x172 718x172+0+0 16-bit sRGB 29.4KB 0.020u 0:00.019

Und die PNG-Datei ist trotz installiertem Inkscape in Ordnung.

TausB

(Themenstarter)
Avatar von TausB

Anmeldungsdatum:
26. November 2009

Beiträge: 1564

Wohnort: Terra incognita

@Vain: Du bist mein Held!
Jawohl, das ist auch bei mir die Lösung. Da wäre ich NIE drauf gekommen. Vielen, vielen Dank! Aber warum funktioniert der im Thread genannte Workaround mit "MSVG:" als prefix nicht?

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2503

Aber gerne. ☺

TausB schrieb:

Aber warum funktioniert der im Thread genannte Workaround mit "MSVG:" als prefix nicht?

Ich vermute, das liegt hieran:

https://nakedsecurity.sophos.com/2016/05/04/is-your-website-or-blog-at-risk-from-this-imagemagick-security-hole/

Der Thread im anderen Forum ist ja schon etwas älter und die „ImageTragick“-Lücke vergleichsweise jung.

Insbesondere wird bei Sophos diese Konfiguration erwähnt:

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

Das finde ich so auch in der „/etc/ImageMagick/policy.xml“ eines aktuellen Ubuntu 16.04 wieder. Damit wird anscheinend die interne Vektorbibliothek von ImageMagick deaktiviert, was zu der Meldung führt, die du siehst:

convert: not authorized `/tmp/magick-3777WhBRSpoiF8Rv' @ error/constitute.c/ReadImage/412.

Entferne ich die Zeile aus meiner „policy.xml“, dann klappt auch der MSVG-Workaround.

Mir fällt es jetzt ein bisschen schwer, zu bewerten, welcher Weg der bessere ist. Dazu kenne ich ImageMagick (und die Lücke) nicht gut genug. Mein Bauchgefühl sagt: Nimm lieber Inkscape aus der „delegates.xml“ raus, anstatt den Workaround für die ImageTragick-Lücke zu deaktivieren.

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7735

Großes Lob an Vain für die betriebene Ursachenforschung. 👍

TausB

(Themenstarter)
Avatar von TausB

Anmeldungsdatum:
26. November 2009

Beiträge: 1564

Wohnort: Terra incognita

Vain schrieb:

Mein Bauchgefühl sagt: Nimm lieber Inkscape aus der „delegates.xml“ raus, anstatt den Workaround für die ImageTragick-Lücke zu deaktivieren.

Ich schließe mich Deinem Bauchgefühl bzw. Deiner hervorragenden Analyse an! Auch von mir noch einmal ein dickes 👍 !

wolfmanx

Anmeldungsdatum:
27. Oktober 2019

Beiträge: Zähle...

Das fehlerhafte Verhalten liegt an ghostscript. In neueren Versionen von ImageMagick (ubuntu 18.04) wird die Konversion nicht mehr mit der Kette

inkscape → EPS → ghostscript → OUTPUT

durchgeführt sondern mit

inkscape → PNG → OUTPUT

Dabei ist lediglich die Option --export-eps durch die Option --export-png ersetzt:

1
<delegate decode="svg:decode" stealth="True" command="&quot;inkscape&quot; &quot;%s&quot; --export-png=&quot;%s&quot; --export-dpi=&quot;%s&quot; --export-background=&quot;%s&quot; --export-background-opacity=&quot;%s&quot; &gt; &quot;%s&quot; 2&gt;&amp;1"/>

Diese Definition kann auch unter ubuntu 16.04 verwendet werden.

Mit dieser Einstellung wird die Beispieldatei watermark.svg nicht mehr als BoundingBox gerendert, sondern entsprechend der Seitendefinition zum Teil abgeschnitten, so wie es auch rsvg-convert(1) macht.

TausB

(Themenstarter)
Avatar von TausB

Anmeldungsdatum:
26. November 2009

Beiträge: 1564

Wohnort: Terra incognita

Jahre später ...

... und ich hatte wieder ähnliche Probleme - dieses Mal unter 20.04 (Transparenz ging verloren). Die hier beschriebenen Maßnahmen halfen nicht. Es musste an dem SVG-Format liegen, da es teilweise sehr wohl funktionierte. Falls ich (oder ein anderer) in ein paar Jahren wieder suche:

Nach Installation des Tools scour (ist auch als DEB in Univers) und Bearbeitung der "widerspenstigen" SVG waren die Resultate wie gewünscht. 👍 😀

Antworten |