用户按 python 将 pdf 转换为 jpg,在 docker 中提高 wand.exceptions.WandRuntimeError
User wand by python to convert pdf to jepg, raise wand.exceptions.WandRuntimeError in docker
我想将 pdf 的第一页转换为图像。我的以下代码在我的本地环境中运行良好:Ubuntu 18。但是当我在 docker 环境中 运行 时,它失败并引发:
wand.exceptions.WandRuntimeError: MagickReadImage returns false, but
did raise ImageMagick exception. This can occurs when a delegate is
missing, or returns EXIT_SUCCESS without generating a raster.
我是不是缺少依赖项?或者是其他东西?我不知道 'delegate'.
指的是什么
我看了源码,这里失败了:wand/image.py::7873lines
if blob is not None:
if not isinstance(blob, abc.Iterable):
raise TypeError('blob must be iterable, not ' +
repr(blob))
if not isinstance(blob, binary_type):
blob = b''.join(blob)
r = library.MagickReadImageBlob(self.wand, blob, len(blob))
elif filename is not None:
filename = encode_filename(filename)
r = library.MagickReadImage(self.wand, filename)
if not r:
self.raise_exception()
msg = ('MagickReadImage returns false, but did raise ImageMagick '
'exception. This can occurs when a delegate is missing, or '
'returns EXIT_SUCCESS without generating a raster.')
raise WandRuntimeError(msg)
行r = library.MagickReadImageBlob(self.wand, blob, len(blob))
returnstrue
在我的本地环境中,但在docker它returnsfalse
。此外,args blob 和 len(blob) 是相同的。
def pdf2img(fp, page=0):
"""
convert pdf to jpeg image
:param fp: a file-like object
:param page:
:return: (Bool, File) if False, mean the `fp` is not pdf, if True, then the `File` is a file-like object
contain the `jpeg` format data
"""
try:
reader = PdfFileReader(fp, strict=False)
except Exception as e:
fp.seek(0)
return False, None
else:
bytes_in = io.BytesIO()
bytes_out = io.BytesIO()
writer = PdfFileWriter()
writer.addPage(reader.getPage(page))
writer.write(bytes_in)
bytes_in.seek(0)
im = Image(file=bytes_in, resolution=120)
im.format = 'jpeg'
im.save(file=bytes_out)
bytes_out.seek(0)
return True, bytes_out
I don't know what it's referring to as 'delegate'.
对于 ImageMagick,'delegate' 指的是任何共享库、实用程序或执行文件类型实际编码和解码的外部程序。具体来说,文件格式为光栅。
Am I missing a dependency?
很有可能。对于 PDF,您需要在 docker 实例上安装 ghostscript
。
Or something else?
可能,但如果没有错误消息则很难确定。 "WandRuntimeError" 异常是包罗万象的。它存在是因为无法从 PDF 生成光栅,并且 Wand 和 ImageMagick 都无法确定 为什么 。如果委托失败、安全策略消息或 OS 错误,通常会出现异常。
最好的办法是 运行 一些 gs
命令来查看 ghostscript 是否正常工作。
gs -sDEVICE=pngalpha -o page-%03d.png -r120 input.pdf
如果以上方法有效,请使用 ImageMagick 再试一次
convert -density 120 input.pdf page-%03d.png
我想将 pdf 的第一页转换为图像。我的以下代码在我的本地环境中运行良好:Ubuntu 18。但是当我在 docker 环境中 运行 时,它失败并引发:
wand.exceptions.WandRuntimeError: MagickReadImage returns false, but did raise ImageMagick exception. This can occurs when a delegate is missing, or returns EXIT_SUCCESS without generating a raster.
我是不是缺少依赖项?或者是其他东西?我不知道 'delegate'.
指的是什么我看了源码,这里失败了:wand/image.py::7873lines
if blob is not None:
if not isinstance(blob, abc.Iterable):
raise TypeError('blob must be iterable, not ' +
repr(blob))
if not isinstance(blob, binary_type):
blob = b''.join(blob)
r = library.MagickReadImageBlob(self.wand, blob, len(blob))
elif filename is not None:
filename = encode_filename(filename)
r = library.MagickReadImage(self.wand, filename)
if not r:
self.raise_exception()
msg = ('MagickReadImage returns false, but did raise ImageMagick '
'exception. This can occurs when a delegate is missing, or '
'returns EXIT_SUCCESS without generating a raster.')
raise WandRuntimeError(msg)
行r = library.MagickReadImageBlob(self.wand, blob, len(blob))
returnstrue
在我的本地环境中,但在docker它returnsfalse
。此外,args blob 和 len(blob) 是相同的。
def pdf2img(fp, page=0):
"""
convert pdf to jpeg image
:param fp: a file-like object
:param page:
:return: (Bool, File) if False, mean the `fp` is not pdf, if True, then the `File` is a file-like object
contain the `jpeg` format data
"""
try:
reader = PdfFileReader(fp, strict=False)
except Exception as e:
fp.seek(0)
return False, None
else:
bytes_in = io.BytesIO()
bytes_out = io.BytesIO()
writer = PdfFileWriter()
writer.addPage(reader.getPage(page))
writer.write(bytes_in)
bytes_in.seek(0)
im = Image(file=bytes_in, resolution=120)
im.format = 'jpeg'
im.save(file=bytes_out)
bytes_out.seek(0)
return True, bytes_out
I don't know what it's referring to as 'delegate'.
对于 ImageMagick,'delegate' 指的是任何共享库、实用程序或执行文件类型实际编码和解码的外部程序。具体来说,文件格式为光栅。
Am I missing a dependency?
很有可能。对于 PDF,您需要在 docker 实例上安装 ghostscript
。
Or something else?
可能,但如果没有错误消息则很难确定。 "WandRuntimeError" 异常是包罗万象的。它存在是因为无法从 PDF 生成光栅,并且 Wand 和 ImageMagick 都无法确定 为什么 。如果委托失败、安全策略消息或 OS 错误,通常会出现异常。
最好的办法是 运行 一些 gs
命令来查看 ghostscript 是否正常工作。
gs -sDEVICE=pngalpha -o page-%03d.png -r120 input.pdf
如果以上方法有效,请使用 ImageMagick 再试一次
convert -density 120 input.pdf page-%03d.png