Python中的Wand库:将PDF转化为图像列表时出现TypeError错误。

3

我正在尝试编写一个Python程序,将PDF转换为图像列表,但是出现了错误:TypeError:'NoneType'对象没有len()

Python

from wand.image import Image as Ima

images = []

pdf = Ima(filename="./sample.pdf")
jpeg = pdf.convert('jpeg')

for img in jpeg.sequence:
    img_page = Image(image=img)
    images.append(img_page.make_blob('jpeg'))

print(images)

终端输出

File "OCR.py", line 9, in <module>
pdf = Ima(filename="./sample.pdf")
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/wand/image.py", line 2744, in __init__
self.read(filename=filename, resolution=resolution)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/wand/image.py", line 2822, in read
self.raise_exception()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/wand/resource.py", line 222, in raise_exception
raise e
wand.exceptions.DelegateError: FailedToExecuteCommand `'gs' -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 '-sDEVICE=pngalpha' -dTextAlphaBits=4 -dGraphicsAlphaBits=4 '-r72x72'  '-sOutputFile=/var/folders/ll/vhx7d69s27l_766f7fh0w8t80000gn/T/magick-17265E7LIPpQmRZ4H%d' '-f/var/folders/ll/vhx7d69s27l_766f7fh0w8t80000gn/T/magick-17265VZNfoxE7irl0' '-f/var/folders/ll/vhx7d69s27l_766f7fh0w8t80000gn/T/magick-17265OAxHJmx1Guv6'' (1) @ error/pdf.c/InvokePDFDelegate/292
Exception ignored in: <bound method Resource.__del__ of <wand.image.Image: (empty)>>
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/wand/resource.py", line 232, in __del__
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/wand/image.py", line 2767, in destroy
TypeError: object of type 'NoneType' has no len()

1
系统上是否安装了Ghostscript? - emcconville
不是的。现在我只是得到了错误 File "OCR.py", line 13, in <module> img_page = Image(image=img) TypeError: 'module' object is not callable - Lxs29
1
因为 Image(image=img) 应该是 Ima(image=img) 吗? - emcconville
@emcconville,你是正确的,应该把它作为答案... - jtlz2
问题是wand.sequence.SingleImage没有make_blob属性,只有wand.image.Image有。 - decadenza
1个回答

1

我曾经遇到同样的问题,这里是我如何在Mac(macOS High Sierra v 10.13.5)上安装Wand (0.4)和ImageMagick v6的逐步指南。

我假设ImageMagick已经安装,如果没有,请先安装:

brew install imagemagick@6

接下来,使用以下命令创建符号链接(将 `` 替换为您的具体版本): ln -s /usr/local/Cellar/imagemagick@6//lib/libMagickWand-6.Q16.dylib /usr/local/lib/libMagickWand.dylib
在我的情况下,是这样的:
ln -s /usr/local/Cellar/imagemagick@6/6.9.10-0/lib/libMagickWand-6.Q16.dylib /usr/local/lib/libMagickWand.dylib

安装Wand。
pip3 install Wand

现在,当我尝试运行代码时,出现了类似的错误消息:

wand.exceptions.DelegateError: FailedToExecuteCommand `’gs’ -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 ‘-sDEVICE=pngalpha’ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 ‘-r72x72’ ‘-

看起来ghostscript没有默认安装,所以让我们安装它:
brew install ghostscript

现在你需要创建一个到 /usr/bin 的软链接,但是在 OS X 10.11+ 中,/usr/bin 是受保护的。
只需按照以下步骤操作:
  1. 重新启动进入恢复模式。启动后按住“Cmd + R”。
  2. 在恢复模式下前往实用工具 -> 终端。
  3. 运行:csrutil disable
  4. 正常模式下重新启动。
  5. 在终端中执行“sudo ln -s /usr/local/bin/gs /usr/bin/gs”。
  6. 执行第1和第2步。在终端中通过运行 csrutil enable 重新启用 csrutil(这些步骤基于 this
对我有效,尽情享用吧!
你可以在这里找到我的原始帖子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接