【问题标题】:How to base64 encode an image from URL rather than file?如何从 URL 而不是文件对图像进行 base64 编码?
【发布时间】:2021-10-06 06:32:12
【问题描述】:

我需要通过 URL 获取图像,并且不将图像保存在本地 base64 编码为字符串,然后通过 URL 作为 api 调用过去。如果我可以在本地保存文件,我可以做到这一点:

with open(photo.jpg, "rb") as file:
       image = [base64.b64encode(file.read()).decode("ascii")]

经过一些研究,我认为我找到了一种无需保存即可完成以下操作的方法:

URL = 'http://www.w3schools.com/css/trolltunga.jpg'

with urllib.request.urlopen(URL) as url:
    f = io.BytesIO(url.read())
    image = base64.b64encode(f.read()).decode("ascii")

但是我得到以下错误:

Traceback (most recent call last):
  File "C:\Users\rich2\Documents\Python\get_image_stream\app3.py", line 13, in <module>
    image = base64.b64encode(img.read()).decode("ascii")
  File "C:\Users\Documents\Python\get_image\venv\lib\site-packages\PIL\Image.py", line 546, in __getattr__
    raise AttributeError(name)
AttributeError: read

我显然遗漏了一些东西,但在任何地方都找不到可行的答案。

【问题讨论】:

  • 欢迎来到堆栈溢出。哪一行是line 13?代码块显示image = base64.b64encode(f.read()).decode("ascii"),跟踪显示用img.read()发现的故障。

标签: python python-3.x base64 urllib


【解决方案1】:

url.read 已经返回一个字节串。所以你的代码应该是

from urllib.request import urlopen
import base64

URL = 'http://www.w3schools.com/css/trolltunga.jpg'

with urlopen(URL) as url:
    f = url.read()
    image = base64.b64encode(f).decode("ascii")

对于未来的问题,请包括导入语句。

【讨论】:

    【解决方案2】:

    我不确定您做了哪些更改,因为您的错误跟踪显示了不同的代码。也许您没有导入必要的模块。这是对我有用的完整代码:

    import urllib.request
    import io
    import base64
    
    URL = 'http://www.w3schools.com/css/trolltunga.jpg'
    
    with urllib.request.urlopen(URL) as url:
        f = io.BytesIO(url.read())
        image = base64.b64encode(f.read()).decode("ascii")
    
    

    【讨论】:

      【解决方案3】:

      您尝试读取图像两次。一次就够了。

      with urllib.request.urlopen(URL) as url:
          image = base64.b64encode(url.read()).decode("ascii")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-26
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 2014-11-18
        相关资源
        最近更新 更多