Python搭建Gitee圖床的示例代碼
摘要
在寫博客的過程中經(jīng)常要插入圖片,許多博客平臺提供了圖片上傳的服務(wù),但是不能保證長期有效,不同平臺還不能通用,所以要通過搭建統(tǒng)一的圖床來實現(xiàn)。有用服務(wù)器作為圖床和第三方圖床,前者限制多,需要備案,后者不是很可靠,而用代碼托管平臺做圖床,既穩(wěn)定可靠沒有很大限制,而且數(shù)據(jù)實現(xiàn)同步,即使云端的數(shù)據(jù)丟失了,本地還有備份,而在中國,為了提升訪問速度,我們并不選取GitHub做圖床,而是選擇了Gitee,本文將使用Python實現(xiàn)對上傳的圖片自動壓縮,自動編碼,以及自動推送到遠程倉庫,但由于Gitee的限制,最后仍需要手動對Gitee Pages進行更新
新建倉庫
如果沒有帳戶,先進入Gitee主頁注冊賬戶,接著新建倉庫,名稱為resource,路徑為res(使用res是為了使圖片鏈接看起來更加簡潔)
新建完成后需要初始化Readme.md文件,同時復(fù)制地址(為了使用Gitee Pages服務(wù)):

然后打開服務(wù)選項:

點擊Gitee Pages:

點擊“啟動”啟動服務(wù):

克隆倉庫
在計算機中找一個位置建一個文件夾,在文件夾中使用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":

注冊成功后會出現(xiàn)如下頁面,啟用并復(fù)制"API Key"

TinyPng每月支持免費轉(zhuǎn)換500張圖片,并且重復(fù)的圖片多次壓縮只算做一次,這對圖片插入量一般的人來說已經(jīng)足夠了,如果覺得一個月500張不夠,又不想花錢,可以多注冊幾個號
安裝需要的Python包
腳本需要用到兩個包:tinify和GitPython
打開cmd命令提示符,輸入安裝指令:
pip install --upgrade tinify pip install gitpython
如果失敗可以嘗試本地安裝
編寫Python腳本
在與res同級的目錄下新建upload.py:

用python的IDE打開該py文件寫入如下代碼:
import random
import time
import os
import shutil
from git import Repo
import tinify
repo = Repo('./res') #創(chuàng)建版本庫對象
tinify.key = '****************' #在此粘貼剛剛復(fù)制的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) + ': + ')\n') #將原始文件名和與之對應(yīng)的圖片網(wǎng)址寫入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()
測試功能
將圖片復(fù)制到temp文件夾,運行upload.py,在其運行完畢后打開Gitee Pages服務(wù)進行更新,然后打開output.txt,復(fù)制里面的Markdown語句至Markdown編輯器即可看見圖片
到此這篇關(guān)于Python搭建Gitee圖床的示例代碼的文章就介紹到這了,更多相關(guān)Python搭建Gitee圖床內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信