You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在IPython中读取Google Cloud及Google Drive图片的问题求助

解决IPython Notebook中读取Google Drive/GCP图片的常见问题

我之前在IPython Notebook里处理过类似的场景,踩过不少坑,给你梳理下针对性的解决思路:

一、Google Drive图片读取问题的核心原因与解决方案

你遇到的「图片损坏」「返回HTML」「URL格式识别错误」,本质都是Google Drive的共享链接默认是网页预览地址,而非直接的文件下载链接,导致requests拿到的不是图片二进制数据,而是网页内容。

1. 转换Drive链接为直接下载格式

把你当前的共享链接(比如 https://drive.google.com/file/d/[FILE_ID]/view?usp=sharing)转换成以下格式:

https://drive.google.com/uc?export=download&id=[FILE_ID]

其中[FILE_ID]是链接中/d/和/view之间的那段字符串。

2. 正确的读取代码示例

用requests配合PIL.Image读取,注意要处理二进制流,同时应对大文件的确认页面:

import requests
from PIL import Image
from io import BytesIO
from IPython.display import display

# 替换成你的图片文件ID
file_id = "xxxxxxxxx"
download_url = f"https://drive.google.com/uc?export=download&id={file_id}"

# 使用Session处理可能的重定向(大文件需要确认)
session = requests.Session()
response = session.get(download_url, stream=True)

# 处理Drive的下载警告cookie
for key, value in response.cookies.items():
    if key.startswith("download_warning"):
        response = session.get(download_url, params={"confirm": value}, stream=True)
        break

# 确保请求成功
response.raise_for_status()

# 读取二进制数据并显示图片
img = Image.open(BytesIO(response.content))
display(img)  # Notebook里用这个显示,不要用img.show()

3. 解决URL格式识别错误

直接用上面的uc?export=download格式链接,就不会出现.com=...被误判为图片格式的问题——因为这个链接返回的是纯二进制图片数据,PIL会自动识别格式,不需要依赖URL后缀。

二、从Google Cloud Platform (GCP) 获取图片的两种方法

如果是读取GCP Cloud Storage里的图片,推荐用官方库或者生成公开URL:

方法1:使用官方google-cloud-storage库(最稳定)

先安装依赖:

!pip install google-cloud-storage

然后在Notebook中读取:

from google.cloud import storage
from PIL import Image
from io import BytesIO
from IPython.display import display
from google.colab import auth  # 如果在Colab中运行需要认证

# 认证(仅Colab需要,本地环境请设置GOOGLE_APPLICATION_CREDENTIALS环境变量)
auth.authenticate_user()

# 初始化客户端
client = storage.Client()
bucket_name = "你的存储桶名称"
image_path = "存储桶内的图片路径,比如images/photo.jpg"

# 下载图片到内存
bucket = client.get_bucket(bucket_name)
blob = bucket.blob(image_path)
img_data = blob.download_as_bytes()

# 显示图片
img = Image.open(BytesIO(img_data))
display(img)

方法2:使用公开URL读取(仅当图片设置了公开权限时可用)

如果你的Cloud Storage图片已经设置了公开访问权限,可以直接生成公开URL并用requests读取:

public_url = blob.public_url  # 从上面的blob对象获取公开URL
response = requests.get(public_url, stream=True)
img = Image.open(BytesIO(response.content))
display(img)

最后再提醒几个小细节

  • 在IPython Notebook中显示图片,一定要用display(img),而不是img.show()——后者会弹出系统自带的图片查看器,不会在Notebook里显示。
  • 如果遇到权限问题,Drive要确保文件设置了「任何人可查看」的共享权限,GCP则要检查存储桶和文件的IAM权限。

内容的提问来源于stack exchange,提问作者ai2016

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:13:03