寫在前面:本博客僅作記錄學習之用,部分圖片來自網絡,如需引用請注明出處,同時如有侵犯您的權益,請聯系刪除!
文章目錄
- 前言
- 預備內容
- 轉webp程序
- PicGo設置
- Quicker設置
- 視頻演示
- 總結
- 互動
- 致謝
- 參考
前言
在自建博客網站中,頁面中圖片過大對響應時間的影響非常顯著:大尺寸圖片文件體積通常可達數MB,而優化后的圖片可能僅需幾十KB。未壓縮的3MB圖片與優化后的100KB圖片相比,傳輸時間在5Mbps帶寬下相差近25秒。頻繁的大圖片請求會增加服務器I/O負載,尤其在流量高峰期,可能觸發服務器限流或宕機。直接導致轉化率下降40%。
對于用戶來說,頁面加載時間每增加1秒,跳出率提升12%。用戶對大圖片導致的緩慢加載缺乏耐心,尤其移動端用戶更傾向于快速離開。SEO排名受損,搜索引擎將頁面速度納入排名算法,大圖片會降低頁面速度得分。
因此通常可以使用壓縮工具,在保持視覺質量前提下壓縮圖片(如將PNG轉為WebP格式可減少30%體積),加快網站的響應,避免用戶長時間的等待。
但實際上有著很多的在線工具、軟件和插件,如 Plus WebP插件、 caesium、cdkm,有免費的也有收費的。要么收集圖像后批量轉換,或者一張張轉化,相對繁瑣。插件通常只能處理媒體庫中的圖像,在實際編寫文章的過程里很麻煩。
因此本文旨在自己編寫程序實現格式轉化的同時上傳到圖床的,實現從獲取圖像到返回公網可訪問的圖像鏈接的自動化流程。
預備內容
- Minio圖床:提供對象存儲
- 公網訪問鏈接:cploar內網穿透,cpolar推薦鏈接
- PicGo:快速上傳
- 格式轉化程序:自行編寫
- 自動化流程:Quicker
Quicker安裝就不說了,直接安裝就是,圖床相關的內容之前有過博客介紹,不重復贅述,可參考下列鏈接:
【本地圖床搭建】寶塔+Docker+MinIO+PicGo+cpolar:打造本地化“黑科技”圖床方案
【本地MinIO圖床遠程訪問】Cpolar TCP隧道+PicGo插件,讓MinIO圖床一鍵觸達
轉webp程序
先看眼對應的依賴:
- python=3.7
- Pillow=9.5.0
- pywin32=308
- argparse
- pyinstaller
筆者創建了新環境進行安裝,conda create -n envs_name python=3.7
程序簡單不多說,只需要知道pywin32是為了對粘貼板進行操作即可。
#!bin/bash
# name: main.pyfrom io import BytesIO
from os import remove as osremove
from PIL import Image
import win32clipboard
from argparse import ArgumentParserdef get_image(args):# 使用粘貼板的圖像if args.clipboard:try:win32clipboard.OpenClipboard()# 粘貼板圖像可得if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_DIB):data = win32clipboard.GetClipboardData(win32clipboard.CF_DIB)win32clipboard.CloseClipboard()# 將DIB數據轉換為PIL圖像stream = BytesIO(data)img = Image.open(stream)return img# 粘貼板圖像不可得else:win32clipboard.CloseClipboard()return Noneexcept Exception as e:print(e)return None# 使用圖片文件else:return Image.open(args.file)def save_image(image, args):try:image.save(f"tmp.webp", format="webp", QUALITY=args.quality)return Trueexcept Exception as e:print(e)return Falsedef main():# 參數說明parser = ArgumentParser()parser.add_argument('--clipboard', '-c', type=bool, default=True, help="convert clipboard image to webp")parser.add_argument('--quality', '-q', type=int,default=80, help="Compression ratio,100 means lossless compression")parser.add_argument('--file', '-f', type=str, default='./test.png', help="path of the image")args = parser.parse_args()# 嘗試移除臨時文件try:osremove("dist/tmp.webp")except Exception as e:pass# 獲取圖像img = get_image(args)if img is None:print("剪貼板中沒有找到圖像!")returnwebp_img = img.copy()save_image(webp_img, args)if __name__ == "__main__":main()
為了方便Quicker,在編寫成功后也進行了打包,后面也會直接給出鏈接,沒有環境也不用擔心。.
打包方法:pyinstaller --onefile --windowed main.py
,打包好的.exe,點擊下載
上述代碼的參數有三個:
① --clipboard:將粘貼板上的圖像進行轉webp格式
② --quality:壓縮比例,100默認不壓縮
③ --file:將特定的圖像進行進行轉webp格式,當且僅當clipboard為否的情況下生效
批量處理的邏輯,可自行擴展,不難的。
PicGo設置
PicGo在2.2.0版本開始內置了一個小型的服務器,用于接收來自其他應用的HTTP請求來上傳圖片。
默認監聽地址: 127.0.0.1,默認監聽端口:36677
更多上傳方式:PicGo-Server的使用
由于防止過多的臨時文件,因此設置了轉化后的文件名字是固定的,因此上傳時候需要重命名,建議時間戳,不重復。
Quicker設置
新建動作:大致有幾個步驟,運行截圖,將截圖內容寫入粘貼板,調用打包程序轉化格式,進一步的讀取該轉化文件,并通過PicGo-Server上傳到對應的圖床。
下面對其的每個部分進行截圖說明:
-
運行動作
-
等待粘貼板內容改變
-
運行打包程序,保存轉化后的圖像
-
等待時間,等待打包程序結束
-
將保存的圖像放入粘貼板
-
HTTP請求,使用PicGo著圖床上傳
視頻演示
Quicker截圖上傳圖床演示視頻
總結
總結: 本文通過Quicker串聯動作,實現從截圖到返回公網可訪問的圖像鏈接的自動化流程。
互動
上述內容對你有用嗎?
歡迎在評論區解答上述問題,分享你的經驗和疑問!
當然,也歡迎一鍵三連給我鼓勵和支持:👍點贊 📁 關注 💬評論 💰打賞。
致謝
欲盡善本文,因所視短淺,怎奈所書皆是瞽言蒭議。行文至此,誠向予助與余者致以謝意。
參考
[1] cpolar推薦鏈接
[2] Quicker
[3] https://saerasoft.com/caesium/
[4] https://cdkm.com/cn/jpg-to-webp
[5] 【本地圖床搭建】寶塔+Docker+MinIO+PicGo+cpolar:打造本地化“黑科技”圖床方案
[6] 【本地MinIO圖床遠程訪問】Cpolar TCP隧道+PicGo插件,讓MinIO圖床一鍵觸達
[7] PicGo-Server的使用