Python搭建Gitee图床的示例代码

 更新时间:2021年10月17日 14:11:24   作者:《虚幻私塾》  
在写博客的过程中经常要插入图片,本文将使用Python实现对上传的图片自动压缩,自动编码,以及自动推送到远程仓库,感兴趣的可以了解一下

摘要

在写博客的过程中经常要插入图片,许多博客平台提供了图片上传的服务,但是不能保证长期有效,不同平台还不能通用,所以要通过搭建统一的图床来实现。有用服务器作为图床和第三方图床,前者限制多,需要备案,后者不是很可靠,而用代码托管平台做图床,既稳定可靠没有很大限制,而且数据实现同步,即使云端的数据丢失了,本地还有备份,而在中国,为了提升访问速度,我们并不选取GitHub做图床,而是选择了Gitee,本文将使用Python实现对上传的图片自动压缩,自动编码,以及自动推送到远程仓库,但由于Gitee的限制,最后仍需要手动对Gitee Pages进行更新

新建仓库

如果没有帐户,先进入Gitee主页注册账户,接着新建仓库,名称为resource,路径为res(使用res是为了使图片链接看起来更加简洁)

新建完成后需要初始化Readme.md文件,同时复制地址(为了使用Gitee Pages服务):

img

然后打开服务选项:

img

点击Gitee Pages:

img

点击“启动”启动服务:

img

克隆仓库

在计算机中找一个位置建一个文件夹,在文件夹中使用Git Bash输入命令克隆仓库到本地:

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

克隆完成后在本地生成了一个名为res的文件夹,此时可以删除文件夹中的Readme.md文件,在res文件夹中新建空文件夹upload_images

在与res同级的目录下新建空文件夹temp用于存放待上传的文件:

img

获取TinyPng的"API Key"

进入TinyPng的主页(https://tinypng.com/),在右上角进行注册:

img

输入邮箱地址:

img

打开邮箱验证,点击邮件中的"Log in with magic link",点击刚刚注册的地方,选择"Account page":

img

注册成功后会出现如下页面,启用并复制"API Key"

img

TinyPng每月支持免费转换500张图片,并且重复的图片多次压缩只算做一次,这对图片插入量一般的人来说已经足够了,如果觉得一个月500张不够,又不想花钱,可以多注册几个号

安装需要的Python包

脚本需要用到两个包:tinifyGitPython

打开cmd命令提示符,输入安装指令:

pip install --upgrade tinify
pip install gitpython

如果失败可以尝试本地安装

编写Python脚本

在与res同级的目录下新建upload.py

img

用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 分析Nginx访问日志并保存到MySQL数据库实例

    Python 分析Nginx访问日志并保存到MySQL数据库实例

    这篇文章主要介绍了Python 分析Nginx访问日志并保存到MySQL数据库实例,需要的朋友可以参考下
    2014-03-03
  • 关于Flask 上下文详细介绍

    关于Flask 上下文详细介绍

    这篇文章主要给大家分享了关于Flask 上下文详细介绍,我们可以把上下文理解为当前环境的快照,是一个用来保存状态的对象。在代码执行的某个时刻,根据上下文的代码逻辑,可以决定在当前时刻下使用到的环境变量等。下面一起进入文章了解详情内容,需要的朋友也可以参考一下
    2021-11-11
  • Python操作qml对象过程详解

    Python操作qml对象过程详解

    这篇文章主要介绍了Python操作qml对象过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python 中@property的用法详解

    Python 中@property的用法详解

    这篇文章主要介绍了Python 中@property的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • python-opencv中的cv2.inRange函数用法说明

    python-opencv中的cv2.inRange函数用法说明

    这篇文章主要介绍了python-opencv中的cv2.inRange函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Python爬虫PyQuery库基本用法入门教程

    Python爬虫PyQuery库基本用法入门教程

    这篇文章主要介绍了Python爬虫PyQuery库基本用法,结合实例形式较为详细的分析了pyQuery库字符串初始化、打开网页、css属性、标签内容等获取、DOM基本操作等相关技巧与使用注意事项,需要的朋友可以参考下
    2018-08-08
  • Python爬虫之自动爬取某车之家各车销售数据

    Python爬虫之自动爬取某车之家各车销售数据

    应朋友要求,帮忙采集某车之家的一些汽车品牌的销售数据,包含购车时间、车型、经销商、裸车价等一类信息. 今天我们就简单演示一下采集过程,大家可以根据自己的兴趣进行拓展.比如采集自己喜欢的品牌汽车数据进行统计分析等等,需要的朋友可以参考下
    2021-06-06
  • python通过socket实现多个连接并实现ssh功能详解

    python通过socket实现多个连接并实现ssh功能详解

    这篇文章主要介绍了python通过socket实现多个连接并实现ssh功能详解,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • python把数据框写入MySQL的方法

    python把数据框写入MySQL的方法

    这篇文章主要介绍了如何让python把数据框写入MySQL,下文利用上海市2016年9月1日公共交通卡刷卡数据的一份数据单展开其方法,需要的小伙伴可以参考一下
    2022-03-03
  • Pyhton自动化测试持续集成和Jenkins

    Pyhton自动化测试持续集成和Jenkins

    这篇文章介绍了Pyhton自动化测试持续集成和Jenkins,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论