우분투 14.04에서 Wand 0.4.4, Python 3.4.3 및 Django 1.11을 통해 ImageMagick 6.7.7-10 2017-07-31 Q16을 사용하고 있습니다. pdf 파일의 jpg 미리보기 이미지를 만들려고합니다.wand, Imagemagick 및 Django를 사용하여 pdf를 jpg로 변환하는 중 오류가 발생했습니다.
convert -thumbnail x300 -background white -alpha remove Lucy.pdf[0] output_thumbnail.jpg
을하지만 같은 이미지에 지팡이를 사용하려고하면이 오류 얻을 :
명령 행에서, 나는 오류없이이 작업을 수행 할 수 있습니다 내가 바라 보았다
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
을/etc에있는 ImageMagic의 delegates.xml 파일과 pdf 파일에 대한 항목이 있습니다.
지팡이를 통해이 전환을 얻는 방법에 대한 제안을 해주셔서 감사합니다.
마크 나 PDF 파일로 지팡이를 테스트하기 위해 내 장고 코드에서 간단한 파이썬 스크립트를 해킹하고 같은 오류를 제공합니다. 또한 Ghostscript가 경로에 있는지 여부를 테스트하고 변환 목록 위임자의 결과를 인쇄했습니다.
from wand.image import Image
from os.path import splitext
import uuid
import os
import hashlib
newname = "sam.jpg"
oldnames = ["16u.jpg", "Lucy.pdf", "Jimbo.tiff", "john_edmonds.pdf", ]
size = "200"
RESOLUTION = 200
test = "4"
TEST_DATA = "test_data/"
def test_delegate():
print ("test_delegate")
print(os.system("convert -list delegate"))
def test_gs():
print ("test_gs")
retval = os.system("gs --version")
print (retval)
def read_image(file_name):
f = open(file_name, 'rb')
h = hashlib.sha256()
buff_size = 128*1024
for b in iter(lambda : f.read(buff_size), b""):
h.update(b)
computed_sha256 = h.hexdigest()
f.close()
print ("b="+str(len(b))+", computed_sha256="+computed_sha256)
return b
def create_thumb(names):
for img in names:
img = TEST_DATA + img
print(img)
thumb_name, thumb_extension = os.path.splitext(img)
thumb_extension = thumb_extension.lower()
bytes = read_image(img)
if thumb_extension in [".pdf",]:
print("found pdf")
#pages = Image(filename = img)
pages = Image(blob = bytes)
first_page = pages.sequence[0]
image = Image(first_page)
else:
print("found image")
#image = Image(filename=img)
image = Image(blob = bytes)
image.transform(resize="x"+size)
image.format = "jpg"
image.save(filename=thumb_name+"_thumb_"+test+".jpg")
print("finished successfully")
def main():
print("main")
test_delegate()
test_gs()
create_thumb(oldnames)
if __name__ == '__main__':
main()
이 프로그램의 출력은 다음과 같습니다. 동일한 부재자 오류가 발생했습니다. 동일한 오류는 tiff 파일에서도 발생하지만 jpg 파일에서는 발생하지 않습니다. 첫 번째 테스트 파일은 jpg이며 코드가 파일을 처리하고 미리보기 이미지를 생성했습니다. 프로그램은 또한 9.10입니다 GS의 버전을 인쇄, 그래서 프로그램에서 액세스 할 수 있습니다, 그것은 어쩌면이 간단한 파이썬 코드가 사람을 도움이 될 것입니다 PDF 파일 :
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()
포함이 발견 된 대표를 출력한다 이 문제를 해결하기위한 방향을 알려주십시오. 그러나 파일 이름 대신 바이트 배열을 사용하면 막대에 버그가있는 것으로 의심됩니다.
감사합니다.
마크
설치된 ImageMagick과의 delegates.xml 파일에서
저는 Wand에 익숙하지 않습니다. 그러나 종종 다른 인터페이스와 함께 Ghostscript는 해당 인터페이스에서 사용되는 PATH에 있어야합니다. 이것은 종종 PHP Imagick에서 발생합니다. 그래서 당신은 그 세트를 가지고 있는지 확인하십시오. 또는 PS 용 delegates.xml 파일을 편집하고 Ghostscript에 대한 전체 경로를 입력 할 수 있습니다. IM 6은 다소 용서가되지만 명령 행 명령은 실제로 적절한 구문이 아닙니다. 다른 명령보다 먼저 입력을 읽어야합니다. 'Lucy.pdf [0] -thumbnail x300 -background white -alpha remove output_thumbnail.jpg'을 올바르게 변환해야합니다.당신의 완드 명령은 무엇입니까? – fmw42
wand 명령은 첫 번째 추적 라인 인 pages = Image (blob = b)에 있습니다. 또한 내 컴퓨터에는 하나의 delegates.xml 만 있으며 모든 pdf 및 ps 등의 항목이 있습니다. gs는/usr/bin에있는 경로에도 있습니다. 나는 또한 간단한 파이썬 프로그램으로 gs를 테스트했다. – user1045680