我想PDF的第一页转换为图像。 而我下面的代码是在我的本地环境正常工作:Ubuntu的18。但是,当我在泊坞窗环境中运行,它失败并引发:
wand.exceptions.WandRuntimeError:MagickReadImage返回false,但没有提高ImageMagick的例外。 委托丢失时,会出现此罐,或不产生光栅返回EXIT_SUCCESS。
我缺少的依赖? 或者是其他东西? 我不知道它指的是作为“代理”。
我看到的源代码,它在这里失败: 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))
返回true
在我当地的环境,但在泊坞窗则返回false
。 此外,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