Python自动化搭建Gitee图床:实现图片压缩与自动推送

听雨眠
听雨眠
发布时间:2026-10-14| 5人浏览过
原创

本文详细介绍如何利用Python脚本搭建基于Gitee的私有图床。通过结合TinyPng进行图片压缩,并使用GitPython自动处理图片编码、提交及推送到远程仓库,实现博客图片的高效管理。文章涵盖仓库初始化、API Key获取、依赖安装及完整Python代码示例,帮助开发者解决图片链接失效及访问速度问题。

摘要

在撰写博客时,插入图片是常见需求。虽然多数博客平台提供图片上传服务,但往往无法保证长期有效性,且跨平台通用性差。因此,搭建统一的图床成为必要解决方案。传统的方案包括使用自有服务器或第三方图床,前者受限于备案等繁琐流程,后者则存在可靠性风险。相比之下,利用代码托管平台作为图床,既稳定可靠且限制较少,还能实现数据同步——即便云端数据丢失,本地仍有备份。在中国大陆,为提升访问速度,通常不选择GitHub,而是选用Gitee。本文将演示如何使用Python脚本实现图片自动压缩、自动编码以及自动推送到远程仓库。需要注意的是,受限于Gitee的服务机制,最后仍需手动触发Gitee Pages的更新操作。

新建仓库

若尚未拥有账户,请先访问Gitee主页完成注册。随后新建一个仓库,将其名称设置为resource,路径指定为res。选择res作为路径名称有助于使生成的图片链接更加简洁易读。

仓库创建完成后,需要初始化Readme.md文件。同时,请复制仓库地址,以便后续启用Gitee Pages服务:

接下来,进入服务配置选项页面:

找到并点击Gitee Pages入口:

点击“启动”按钮以激活Pages服务:

克隆仓库

在本地计算机中选择一个合适的位置创建文件夹,并在该文件夹内打开Git Bash,输入以下命令将仓库克隆至本地:


git clone https://gitee.com/xxx/xxx.git

克隆操作完成后,本地会生成一个名为res的文件夹。此时,可以安全删除该文件夹内的Readme.md文件。接着,在res文件夹内部新建一个空文件夹,命名为upload_images。

在与res目录同级的位置,再新建一个空文件夹temp,专门用于存放待上传处理的源文件:

获取TinyPng的"API Key"

访问TinyPng官方网站(https://tinypng.com/),在页面右上角完成注册流程:


正确输入您的电子邮箱地址:

登录邮箱进行验证,点击邮件中包含的"Log in with magic link"链接。随后在注册页面选择"Account page"进入账户管理:

注册成功后,页面将显示如下界面,请启用服务并复制生成的"API Key":

TinyPng每月允许免费转换500张图片,且对于重复图片多次压缩仅计为一次。对于大多数普通用户而言,这一额度已足够使用。若觉得每月500张不足且不愿付费,可以通过注册多个账号来增加额度。

安装需要的Python包

该脚本主要依赖两个Python库:tinify用于图片压缩,以及GitPython用于Git操作。

打开cmd命令提示符,执行以下安装指令:


pip install --upgrade tinify
pip install gitpython

若在线安装失败,可尝试下载离线包进行本地安装。

编写Python脚本

在与res目录同级的位置,新建Python脚本文件upload.py:

使用Python IDE打开该py文件,并写入以下代码:


import random
import time
import os
import shutil
from git import Repo
import tinify

repo = Repo('./res') #创建版本库对象
tinify.key = '****************' #在此粘贴刚刚复制的API Key

exts = ['.png','.jpg','.bmp'] #支持的图像格式
compression = ['.png','.jpg'] #支持压缩的图像格式
srcdir = './temp' #源文件夹
dstdir = './res/upload_images' #目标文件夹
url = 'https://xxx.gitee.io/res/upload_images/' #图床路径(末尾必须加“/”),将xxx替换成自己的用户名

def random_hex(length):
    result = hex(random.randint(0,16**length)).replace('0x','').lower()
    if(len(result)<length):
        result = '0'*(length-len(result))+result
    return result

def auto_code(ext):
    while True:
        name = random_hex(8) #随机8位16进制编码
        result = os.path.join(dstdir,name + ext)
        if not os.path.exists(result):
            break #目标路径不存在则可以移动图片
    return result

def main():
    f = open('./output.txt','w') #打开输出文件
    list = os.listdir(srcdir) #列出文件夹下所有的目录与文件
    for i in range(0,len(list)):
        srcpath = os.path.join(srcdir,list[i])
        if not os.path.isfile(srcpath):
            continue #不是文件则跳过
        ext=os.path.splitext(srcpath)[-1].lower() #获取文件扩展名
        if ext not in exts:
            continue #不是支持的图像格式则跳过
        dstpath = auto_code(ext)
        if ext in compression:
            tinify.from_file(srcpath).to_file(srcpath) #压缩文件
            shutil.move(srcpath,dstpath) #移动文件
            print('成功压缩并移动:' + os.path.basename(srcpath))
        else:
            shutil.move(srcpath,dstpath) #移动文件
            print('成功移动:' + os.path.basename(srcpath))
        f.write(os.path.basename(srcpath) + ':![](' + url + os.path.basename(dstpath) + ')\n') #将原始文件名和与之对应的图片网址写入txt文件
    f.close()
    print('输出文件output.txt已生成')
    print(repo.git.add('--all')) #添加全部更改
    print(repo.git.commit('-m upload images')) #提交
    print(repo.remote().push('master')) #推送
    print('已推送至远程仓库,python即将退出')
    time.sleep(1)

if __name__ == '__main__':
    main()

测试功能

将需要处理的图片复制到temp文件夹中,运行upload.py脚本。待脚本运行完毕后,请手动打开Gitee Pages服务进行更新操作。随后打开output.txt文件,复制其中的Markdown语句至Markdown编辑器中,即可预览图片效果。

到此这篇关于Python搭建Gitee图床的示例代码的文章就介绍到这了,更多相关Python搭建Gitee图床内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。