如何使用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
相关产品推荐
相关产品推荐

