python - 如何将 reportlab 的 drawImage 与图像 url 一起使用?

标签 python python-2.7 python-imaging-library reportlab

当我尝试以下操作时:

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen.canvas import Canvas
import urllib
import StringIO
import PIL.Image

image_file = urllib.urlopen('https://www.google.com/images/srpr/logo11w.png')
image_string = StringIO.StringIO(image_file.read())
logo = PIL.Image.open(image_string)

canvas = Canvas('output.pdf', pagesize=letter)
canvas.drawImage(logo, 10, 10)
canvas.showPage()
canvas.save()

我收到这个错误:

Traceback (most recent call last):
  File "imagefromurl.py", line 12, in <module>
    canvas.drawImage(logo, 10, 10)
  File "/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.py", line 857, in drawImage
    imgObj = pdfdoc.PDFImageXObject(name, image, mask=mask)
  File "/usr/lib/python2.7/dist-packages/reportlab/pdfbase/pdfdoc.py", line 2090, in __init__
    ext = string.lower(os.path.splitext(source)[1])
  File "/usr/lib/python2.7/posixpath.py", line 96, in splitext
    return genericpath._splitext(p, sep, altsep, extsep)
  File "/usr/lib/python2.7/genericpath.py", line 91, in _splitext
    sepIndex = p.rfind(sep)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 515, in __getattr__
    raise AttributeError(name)

Reportlab 是 2.5 版。

最佳答案

我做的很辛苦。这有效(还添加了必要的 mask 以避免透明变黑):

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.utils import ImageReader

logo = ImageReader('https://www.google.com/images/srpr/logo11w.png')

canvas = Canvas('output.pdf', pagesize=letter)
canvas.drawImage(logo, 10, 10, mask='auto')
canvas.showPage()
canvas.save()

虽然困难的方法可以让我检测到获取图像 url 和处理它的失败(例如替换本地镜像),但事实并非如此。

关于python - 如何将 reportlab 的 drawImage 与图像 url 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26128462/

相关文章:

python - 在python中的kafka Direct Stream中手动提交偏移量

python - 从浏览器运行 Python 应用程序

python - 如何通过使用正则表达式来区分带有URL的域名地址?

python - 在 Python 中使用 subprocess.Popen 将 shell 命令输出重定向到文件不起作用

python - 在 Tornado 中捕获 PIL 异常

python - 重新引发异常有什么意义?

python - 如何在 Python 中解析 Linux 终端错误消息?

python - 如何在 Windows 上使用 iPython Notebook 解决 pandas 的导入错误?

python - 用python拆分多页tiff

python - PyTesseract 不工作