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

如何使用PyGithub向GitHub仓库上传图片文件?

问题根因

你对create_file()方法的参数判断有误,该方法本身同时支持接收str类型的文本内容、bytes类型的二进制内容,两类报错均为文件读取环节的问题导致:

  • 首次报错:使用open()打开图片时未指定二进制读取模式,Python默认以文本模式加载文件,Windows环境会自动调用cp1252编码解码二进制格式的图片数据,直接触发Unicode解码错误。
  • 二次cv2报错:cv2.imread()返回的是numpy格式的像素矩阵,不属于str/bytes类型,不符合参数校验规则,因此触发断言错误。
实现方案

方案1:原生二进制读取上传(无额外依赖,推荐)

打开文件时新增rb(二进制只读)模式参数即可直接读取符合要求的字节流,不需要引入额外图像处理库,可直接运行的参考代码:

from github import Github

# 替换为你的GitHub个人访问令牌,注意令牌需要开启仓库读写权限
g = Github("你的个人访问Token")
# 替换为目标仓库完整标识,格式为「仓库所有者/仓库名称」,例如"mjjha/MyTestRepo"
repo = g.get_repo("你的仓库完整路径")

# 核心:以二进制模式读取图片文件
with open("1.png", "rb") as f:
    img_data = f.read()

# 调用接口上传,参数依次为:文件在仓库内的存储路径、提交说明、文件内容
repo.create_file(
    path="images/1.png",
    message="upload 1.png",
    content=img_data
)

注意:如果要上传到仓库的指定子目录,直接在path参数里写全路径即可,不存在的目录GitHub会自动创建。

方案2:OpenCV处理后上传

如果需要先用OpenCV对图片做缩放、滤镜、裁剪等处理再上传,需要先把处理后的numpy矩阵编码为标准字节流再传入接口,参考代码:

from github import Github
import cv2

g = Github("你的个人访问Token")
repo = g.get_repo("你的仓库完整路径")

# 读取并处理图片
img = cv2.imread("1.png")
# 此处可插入自定义cv2图像处理逻辑,例如尺寸调整、灰度化等
# img = cv2.resize(img, (500, 500))

# 将numpy矩阵编码为PNG格式字节流
encode_success, encoded_img = cv2.imencode(".png", img)
if not encode_success:
    raise RuntimeError("图片编码失败,无法上传")
img_bytes = encoded_img.tobytes()

repo.create_file(
    path="processed_1.png",
    message="upload opencv processed image",
    content=img_bytes
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:15:43