Python搭建Gitee圖床的示例代碼
摘要
在寫博客的過程中經常要插入圖片,許多博客平臺提供瞭圖片上傳的服務,但是不能保證長期有效,不同平臺還不能通用,所以要通過搭建統一的圖床來實現。有用服務器作為圖床和第三方圖床,前者限制多,需要備案,後者不是很可靠,而用代碼托管平臺做圖床,既穩定可靠沒有很大限制,而且數據實現同步,即使雲端的數據丟失瞭,本地還有備份,而在中國,為瞭提升訪問速度,我們並不選取GitHub做圖床,而是選擇瞭Gitee,本文將使用Python實現對上傳的圖片自動壓縮,自動編碼,以及自動推送到遠程倉庫,但由於Gitee的限制,最後仍需要手動對Gitee Pages進行更新
新建倉庫
如果沒有帳戶,先進入Gitee主頁註冊賬戶,接著新建倉庫,名稱為resource
,路徑為res
(使用res是為瞭使圖片鏈接看起來更加簡潔)
新建完成後需要初始化Readme.md
文件,同時復制地址(為瞭使用Gitee Pages服務):
然後打開服務選項:
點擊Gitee 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包
腳本需要用到兩個包: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') #創建版本庫對象 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圖床內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python文件目錄操作之os模塊
- python利用文件時間批量重命名照片和視頻
- Python實現PDF轉換文本詳解
- Python中的sys模塊、random模塊和math模塊
- 使用Gitee自動化部署python腳本的詳細過程