2017-11-13 6 views
0

Ich benutze ImageMagick 6.7.7-10 2017-07-31 Q16 auf Ubuntu 14.04, durch Wand 0.4.4, Python 3.4.3 und Django 1.11. Ich versuche ein JPG-Thumbnail einer PDF-Datei zu erstellen.Fehler beim Konvertieren von PDF in JPG mit Hilfe von Zauberstab, Imagemagick und Django

Auf der Kommandozeile kann ich dies tun, ohne Fehler:

convert -thumbnail x300 -background white -alpha remove Lucy.pdf[0] output_thumbnail.jpg 

Aber wenn ich versuche Zauberstab auf das gleiche Bild zu verwenden, bekomme ich diesen Fehler:

Traceback (most recent call last): 
    File "/home/mark/python-projects/memorabilia-project/memorabilia/models.py", line 24, in make_thumb 
    pages = Image(blob = b) 
    File "/home/mark/.virtualenvs/memorabilia/lib/python3.4/site-packages/wand/image.py", line 2742, in __init__ 
    self.read(blob=blob, resolution=resolution) 
    File "/home/mark/.virtualenvs/memorabilia/lib/python3.4/site-packages/wand/image.py", line 2822, in read 
    self.raise_exception() 
    File "/home/mark/.virtualenvs/memorabilia/lib/python3.4/site-packages/wand/resource.py", line 222, in raise_exception 
    raise e 
wand.exceptions.MissingDelegateError: no decode delegate for this image format `' @ error/blob.c/BlobToImage/367 

Ich sah die delegates.xml-Datei für ImageMagic in/etc, und es gibt Einträge für PDF-Dateien.

Vielen Dank für alle Vorschläge, wie Sie diese Umwandlung mit dem Stab erhalten können.

Mark

ich einen einfachen Python-Skript aus meinem django Code gehackt Stab mit pdfs zu testen, und es gibt die gleichen Fehler. Ich habe auch getestet, ob Ghostscript im Pfad ist, und die Ergebnisse von Convert-List-Delegaten ausgedruckt.

Die Ausgabe von diesem Programm ist wie folgt. Es hat den gleichen fehlenden Delegiertenfehler. Derselbe Fehler tritt auch bei TIFF-Dateien auf, aber nicht bei JPG-Dateien (die erste Testdatei ist ein JPG und der Code hat die Datei verarbeitet und das Miniaturbild erstellt). Das Programm druckt auch die Version von GS, die 9,10 ist, so dass ist von dem Programm, und es druckt die Delegierten gefunden, die PDF-Dateien enthalten .:

python thumbs.py 
main 
test_delegate 

Path: /etc/ImageMagick/delegates.xml 

Delegate    Command 
------------------------------------------------------------------------------- 
    blender =>   "blender" -b "%i" -F PNG -o "%o""\n"convert" -concatenate "%o*.png" "%o" 
     cdr =>   "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o" 
     cgm =>   "ralcgm" -d ps -oC < "%i" > "%o" 2> "%Z" 
dng:decode =>   "ufraw-batch" --silent --create-id=also --out-type=png --out-depth=16 "--output=%u.png" "%i" 
     dot =>   "dot" -Tsvg "%i" -o "%o" 
     dvi =>   "dvips" -q -o "%o" "%i" 
     eps<=>pdf  "gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 "-sDEVICE=pdfwrite" "-sOutputFile=%o" "-f%i" 
     eps<=>ps  "gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=nodevice" "-sOutputFile=%o" "-f%i" 
     fig =>   "fig2dev" -L ps "%i" "%o" 
     hpg =>   "hp2xx" -q -m eps -f `basename "%o"` "%i";  mv -f `basename "%o"` "%o" 
     hpgl =>   "if [ -e hp2xx -o -e /usr/bin/hp2xx ]; then  hp2xx -q -m eps -f `basename "%o"` "%i";  mv -f `basename "%o"` "%o"; else  echo "You need to install hp2xx to use HPGL files with ImageMagick.";  exit 1; fi" 
     htm =>   "html2ps" -U -o "%o" "%i" 
     html =>   "html2ps" -U -o "%o" "%i" 
     https =>   "curl" -s -k -o "%o" "https:%F" 
     ilbm =>   "ilbmtoppm" "%i" > "%o" 
     man =>   "groff" -man -Tps "%i" > "%o" 
     miff<= show  "/usr/bin/display" -delay 0 -window-group %[group] -title "%l " "ephemeral:%i" 
mpeg:decode =>   "ffmpeg" -v -1 -i "%i" -vframes %S -vcodec pam -an -f rawvideo -y "%u.pam" 2> "%Z" 
     pdf<=>eps  "gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=epswrite" "-sOutputFile=%o" "-f%i" 
     pdf<=>ps  "gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=nodevice" "-sOutputFile=%o" "-f%i" 
     pnm<= ilbm  "ppmtoilbm" -24if "%i" > "%o" 
     pov =>   "povray" "+i%i" -D0 "+o%o" +fn%q +w%w +h%h +a -q9 "-kfi%s" "-kff%n";"convert" -concatenate "%o*.png" "%o" 
     ps<=>eps  "gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=epswrite" "-sOutputFile=%o" "-f%i" 
     ps<=>pdf  "gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pdfwrite" "-sOutputFile=%o" "-f%i" 
     ps<= print  "lpr "%i" 
     rgba<= rle  "rawtorle" -o "%o" -v "%i" 
     scan =>   "scanimage" -d "%i" > "%o" 
     scanx =>   "scanimage" > "%o" 
     shtml =>   "html2ps" -U -o "%o" "%i" 
     sid =>   "mrsidgeodecode" -if sid -i "%i" -of tif -o "%o" > "%u" 
     svg =>   "rsvg-convert" -o "%o" "%i" 
     tiff<= launch "gimp" "%i" 
     txt<=>ps  "enscript" -o "%o" "%i" 
     wmf =>   "wmf2eps" -o "%o" "%i" 
0 
test_gs 
9.10 
0 
test_data/16u.jpg 
b=43597, computed_sha256=0bac89048bbbcfa75ad7d9dbc84eae42ff6b30c0a057dd76e180a205d9021b8d 
found image 
finished successfully 
test_data/Lucy.pdf 
b=61053, computed_sha256=6e108603ad4f6ae2e08b3d2a419a65d3cc1f60b788e9377be15b1926892189f8 
found pdf 
Traceback (most recent call last): 
    File "thumbs.py", line 63, in <module> 
    main() 
    File "thumbs.py", line 60, in main 
    create_thumb(oldnames) 
    File "thumbs.py", line 44, in create_thumb 
    pages = Image(blob = bytes) 
    File "/home/mark/.virtualenvs/memorabilia/lib/python3.4/site-packages/wand/image.py", line 2742, in __init__ 
    self.read(blob=blob, resolution=resolution) 
    File "/home/mark/.virtualenvs/memorabilia/lib/python3.4/site-packages/wand/image.py", line 2822, in read 
    self.raise_exception() 
    File "/home/mark/.virtualenvs/memorabilia/lib/python3.4/site-packages/wand/resource.py", line 222, in raise_exception 
    raise e 
wand.exceptions.MissingDelegateError: no decode delegate for this image format `' @ error/blob.c/BlobToImage/367 
Exception ignored in: <bound method Image.__del__ of <wand.image.Image: (empty)>> 
Traceback (most recent call last): 
    File "/home/mark/.virtualenvs/memorabilia/lib/python3.4/site-packages/wand/resource.py", line 232, in __del__ 
    File "/home/mark/.virtualenvs/memorabilia/lib/python3.4/site-packages/wand/image.py", line 2767, in destroy 
TypeError: object of type 'NoneType' has no len() 

Vielleicht einfache Python-Code wird jemand helfen geben Sie mir eine Richtung, um dieses Problem zu lösen. Ich beginne jedoch zu vermuten, dass es einen Zauberstab im Zauberstab gibt, wenn man Byte-Arrays anstelle von Dateinamen verwendet.

Danke!

Mark

+0

Ich bin nicht wirklich vertraut mit Wand. Ghostscript muss jedoch häufig mit anderen Schnittstellen im PATH sein, der von dieser Schnittstelle verwendet wird. Dies passiert zum Beispiel bei PHP Imagick. Sei also sicher, dass du das hast. Alternativ können Sie die delegates.xml-Datei für PS bearbeiten und den vollständigen Pfad zu Ghostscript eingeben. Beachten Sie, dass Ihr Kommandozeilenbefehl eigentlich keine korrekte Syntax ist, obwohl IM 6 ziemlich fehlerverzeihend ist. Sie sollten die Eingabe vor anderen Befehlen lesen. Es sollte richtig sein 'konvertieren Lucy.pdf [0] -thumbnail x300 -background white -alpha entfernen output_thumbnail.jpg'.Was war dein Zauberstab? – fmw42

+0

Der Befehl wand befindet sich in der ersten Traceback-Zeile, pages = Image (blob = b). Außerdem gibt es nur eine delegates.xml auf meinem Computer, die alle Einträge für pdf und ps usw. enthält. gs befindet sich auch auf dem Pfad in/usr/bin. Ich habe auch mit einem einfachen Python-Programm überprüft, um gs zu testen. – user1045680

Antwort

0

In Ihrer installierten ImageMagick delegates.xml Datei, finden Sie:

<delegate decode="ps:alpha" stealth="True" command="&quot;gs&quot; -sstdout=%%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pngalpha&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;-f%s&quot; &quot;-f%s&quot;"/> 

    <delegate decode="ps:cmyk" stealth="True" command="&quot;gs&quot; -sstdout=%%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pamcmyk32&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;-f%s&quot; &quot;-f%s&quot;"/> 

    <delegate decode="ps:color" stealth="True" command="&quot;gs&quot; -sstdout=%%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pnmraw&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;-f%s&quot; &quot;-f%s&quot;"/> 

    <delegate decode="ps" encode="eps" mode="bi" command="&quot;gs&quot; -sstdout=%%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=eps2write&quot; &quot;-sOutputFile=%o&quot; &quot;-f%i&quot;"/> 

    <delegate decode="ps" encode="pdf" mode="bi" command="&quot;gs&quot; -sstdout=%%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pdfwrite&quot; &quot;-sOutputFile=%o&quot; &quot;-f%i&quot;"/> 

Wo es command="&quot;gs&quot; hat, dass ändern Sie den vollständigen Pfad zu gs anstelle von gs bereitzustellen; Das heißt, command="&quot;path2/gs&quot;

Stellen Sie sicher, dass Sie dies in der installierten Datei und nicht im ImageMagick-Download-Verzeichnis ändern. Reboot und sehen, ob das hilft.

Entschuldigung, das ist mein einziger Vorschlag. Und wieder bin ich mit Wand nicht wirklich vertraut. Entschuldigung, wenn es nicht hilft.

P.S. Ist ImageMagick in/usr/bin oder/usr/local/bin? Wenn letzteres, ist das auch in Ihrer PATH-Umgebungsvariablen. Tut mir leid, wenn das offensichtlich ist.

+0

Ich glaube nicht, dass ist ein gs Pfad Problem, wie das Programm oben zeigt, dass das Programm auf gs zugreifen kann. Das obige Programm zeigt auch, dass es auf alle ImageMagick-Delegierten für PDF zugreifen kann. Ich denke, es ist ein Fehler im Zauberstab. Vielen Dank! – user1045680

+0

Sie können Recht haben, da ich nichts über die Verwendung von Wand weiß. Sie erhalten jedoch die folgende Fehlermeldung "kein Dekodierdelegat für dieses Bildformat", was normalerweise bedeutet, dass der erforderliche Delegat nicht gefunden werden kann. Ich gehe davon aus, dass Ghostscript nicht von Wand gefunden werden kann, obwohl es direkt von ImageMagick kommen kann. Aus diesem Grund habe ich vorgeschlagen, den vollständigen Pfad zu Ghostscript in die Datei delegates.xml zu schreiben. – fmw42

+0

Wenn Sie sich meinen letzten Testlauf ansehen, werden Sie sehen, dass das Programm GS finden kann, weil es die richtige Version ausgibt (9.10). Das Testprogramm druckt auch alle Delegierten aus, die es finden kann, einschließlich pdf. Ich habe auch das gleiche Programm ausgeführt, hatte aber Wand die gleichen Dateien von der Festplatte lesen lassen, anstatt sie als binäre Blobs zu übergeben, und alle Bilder werden wie erwartet verarbeitet. So bin ich jetzt sicherer, dass es beim Lesen von Binärdaten einen Fehler im Zauberstab gibt, im Gegensatz zum Lesen einer Datei vom lokalen Laufwerk. Danke für deine Kommentare! – user1045680

Verwandte Themen