Python搭建Gitee圖床的示例代碼
摘要
在寫(xiě)博客的過(guò)程中經(jīng)常要插入圖片,許多博客平臺(tái)提供了圖片上傳的服務(wù),但是不能保證長(zhǎng)期有效,不同平臺(tái)還不能通用,所以要通過(guò)搭建統(tǒng)一的圖床來(lái)實(shí)現(xiàn)。有用服務(wù)器作為圖床和第三方圖床,前者限制多,需要備案,后者不是很可靠,而用代碼托管平臺(tái)做圖床,既穩(wěn)定可靠沒(méi)有很大限制,而且數(shù)據(jù)實(shí)現(xiàn)同步,即使云端的數(shù)據(jù)丟失了,本地還有備份,而在中國(guó),為了提升訪問(wèn)速度,我們并不選取GitHub做圖床,而是選擇了Gitee,本文將使用Python實(shí)現(xiàn)對(duì)上傳的圖片自動(dòng)壓縮,自動(dòng)編碼,以及自動(dòng)推送到遠(yuǎn)程倉(cāng)庫(kù),但由于Gitee的限制,最后仍需要手動(dòng)對(duì)Gitee Pages進(jìn)行更新
新建倉(cāng)庫(kù)
如果沒(méi)有帳戶,先進(jìn)入Gitee主頁(yè)注冊(cè)賬戶,接著新建倉(cāng)庫(kù),名稱為resource
,路徑為res
(使用res是為了使圖片鏈接看起來(lái)更加簡(jiǎn)潔)
新建完成后需要初始化Readme.md
文件,同時(shí)復(fù)制地址(為了使用Gitee Pages服務(wù)):
然后打開(kāi)服務(wù)選項(xiàng):
點(diǎn)擊Gitee Pages:
點(diǎn)擊“啟動(dòng)”啟動(dòng)服務(wù):
克隆倉(cāng)庫(kù)
在計(jì)算機(jī)中找一個(gè)位置建一個(gè)文件夾,在文件夾中使用Git Bash
輸入命令克隆倉(cāng)庫(kù)到本地:
git clone https://gitee.com/xxx/xxx.git
克隆完成后在本地生成了一個(gè)名為res
的文件夾,此時(shí)可以刪除文件夾中的Readme.md
文件,在res
文件夾中新建空文件夾upload_images
在與res
同級(jí)的目錄下新建空文件夾temp
用于存放待上傳的文件:
獲取TinyPng的"API Key"
進(jìn)入TinyPng的主頁(yè)(https://tinypng.com/),在右上角進(jìn)行注冊(cè):
輸入郵箱地址:
打開(kāi)郵箱驗(yàn)證,點(diǎn)擊郵件中的"Log in with magic link",點(diǎn)擊剛剛注冊(cè)的地方,選擇"Account page":
注冊(cè)成功后會(huì)出現(xiàn)如下頁(yè)面,啟用并復(fù)制"API Key"
TinyPng每月支持免費(fèi)轉(zhuǎn)換500張圖片,并且重復(fù)的圖片多次壓縮只算做一次,這對(duì)圖片插入量一般的人來(lái)說(shuō)已經(jīng)足夠了,如果覺(jué)得一個(gè)月500張不夠,又不想花錢,可以多注冊(cè)幾個(gè)號(hào)
安裝需要的Python包
腳本需要用到兩個(gè)包:tinify
和GitPython
打開(kāi)cmd命令提示符,輸入安裝指令:
pip install --upgrade tinify pip install gitpython
如果失敗可以嘗試本地安裝
編寫(xiě)Python腳本
在與res
同級(jí)的目錄下新建upload.py
:
用python的IDE打開(kāi)該py文件寫(xiě)入如下代碼:
import random import time import os import shutil from git import Repo import tinify repo = Repo('./res') #創(chuàng)建版本庫(kù)對(duì)象 tinify.key = '****************' #在此粘貼剛剛復(fù)制的API Key exts = ['.png','.jpg','.bmp'] #支持的圖像格式 compression = ['.png','.jpg'] #支持壓縮的圖像格式 srcdir = './temp' #源文件夾 dstdir = './res/upload_images' #目標(biāo)文件夾 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) #隨機(jī)8位16進(jìn)制編碼 result = os.path.join(dstdir,name + ext) if not os.path.exists(result): break #目標(biāo)路徑不存在則可以移動(dòng)圖片 return result def main(): f = open('./output.txt','w') #打開(kāi)輸出文件 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 #不是文件則跳過(guò) ext=os.path.splitext(srcpath)[-1].lower() #獲取文件擴(kuò)展名 if ext not in exts: continue #不是支持的圖像格式則跳過(guò) dstpath = auto_code(ext) if ext in compression: tinify.from_file(srcpath).to_file(srcpath) #壓縮文件 shutil.move(srcpath,dstpath) #移動(dòng)文件 print('成功壓縮并移動(dòng):' + os.path.basename(srcpath)) else: shutil.move(srcpath,dstpath) #移動(dòng)文件 print('成功移動(dòng):' + os.path.basename(srcpath)) f.write(os.path.basename(srcpath) + ': + ')\n') #將原始文件名和與之對(duì)應(yīng)的圖片網(wǎng)址寫(xiě)入txt文件 f.close() print('輸出文件output.txt已生成') print(repo.git.add('--all')) #添加全部更改 print(repo.git.commit('-m upload images')) #提交 print(repo.remote().push('master')) #推送 print('已推送至遠(yuǎn)程倉(cāng)庫(kù),python即將退出') time.sleep(1) if __name__ == '__main__': main()
測(cè)試功能
將圖片復(fù)制到temp
文件夾,運(yùn)行upload.py
,在其運(yùn)行完畢后打開(kāi)Gitee Pages服務(wù)進(jìn)行更新,然后打開(kāi)output.txt
,復(fù)制里面的Markdown語(yǔ)句至Markdown編輯器即可看見(jiàn)圖片
到此這篇關(guān)于Python搭建Gitee圖床的示例代碼的文章就介紹到這了,更多相關(guān)Python搭建Gitee圖床內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。