mac下使用腳本為圖片加水印、上傳圖牀

筆者經常用markdown寫一些東西,圖片是文章中必不可少的。一般情況下,都是先是將畫好的圖保存到本地的某個地方,然後手動將圖片上傳到OSS(如七牛雲),最後拷貝外鏈地址加到文章中。

另一種場景是加水印。原創不易,有時候會發生第一天晚上寫好的博客文章,第二天就出現在某公眾號號,並且申請了原創保護。這個時候如果圖片上有個特殊水印,原封不動地拷貝文章就有出處可尋。雖然不能完全解決這種侵權的行為,但是也提高了抄襲者的成本。

具體實現

至於具體實現,我當時考慮了幾個問題:

  1. 文檔下載了之後,能不能立即將該文檔夾的變化輸出;
  2. 將下載後的文檔能夠加上預置好的水印(這個OSS肯定能夠提供);
  3. 根據輸出的添加文檔名(圖片名),將該文檔上傳到OSS;
  4. 返回圖片文檔的外鏈地址。

涉及到的工具:

  • OS: macOS
  • 圖牀:七牛雲
  • 文檔監控工具:fswatch

筆者整理了使用的七牛雲的存儲SDK,主要是 上傳&預轉持續化 ,將圖片加水印上傳到對應的bucket中。這僅是一個小工具,目前已經能滿足筆者的需求。

文檔監控工具:fswatch

Linux下面可以使用 inotify-tools 來進行文檔夾、文檔變更的檢測。

fswatch是一個使用Mac OS X FSEvents API的同步工具,同時也可以使用在BSD 與Debian操作系統。

使用Homebrew進行安裝:

brew install fswatch

監控/User/usr/Downloads文檔夾:

fswatch /User/usr/Downloads

當/User/usr/Downloads文檔內容變化時,輸出變動的文檔列表。如:

/Users/user/Downloads/PlatformTransactionManager.jpg

當然fswatch還有其他用法,這裏不展開。

七牛雲創建bucket以及樣式

首先需要註冊七牛雲的賬號,點擊 註冊信道 註冊(筆者這裏不是專門打廣告,沒有收取任何廣告費。。)。

其次,創建一個bucket。如下圖,筆者命名為 bl-bucket

在上圖中,還可以看出筆者綁定了域名 http://image.blueskykong.com ,這個可以自行選擇,如果不綁定,可以使用測試域名。綁定域名之後,記得將該域名設為外鏈默認域名。

這裏之所以這樣做,是為了後面腳本返回最後的外鏈地址(我定義的規則為:拼接外鏈默認域名 + 文檔名)。

然後,設置水印樣式,筆者在圖片的右下角添加了文本水印 公眾號:aoho求索 。當然還可以對圖片進行其他樣式設置,如縮放圖片,設置長寬等,讀者根據需要自定。設置好之後,如下圖所示:

我們需要的其實是,最後生成的處理接口,這會用在我們的上傳腳本中。

腳本編寫

上面的步驟中,我們先是記錄了特定文檔的添加圖片名記錄,其次是設定好我們的bucket、外鏈域名以及水印樣式。下面我們進行編碼。

啟動fswatch後,輸出變動文檔記錄到指定的文檔,之後主要分為三步:

  • 我們的腳本基於Python,安裝七牛雲的Python SDK,具體參考官網 Python SDK
  • 讀取指定文檔記錄的變化的值,這裏筆者指定讀取最後一行(變動其實是主動的,所以只需要最後一行的記錄即為添加的圖片文檔)
  • 將該文檔進行上傳,用到的是七牛雲的 上傳&預轉持續化
# -*- coding: utf-8 -*-
# flake8: noqa

from qiniu import Auth, put_file, etag, urlsafe_base64_encode
import qiniu.config
from qiniu import BucketManager
from optparse import OptionParser
# 水印上傳函數
def watermark_add(filename):
 #要上傳的空間
 bucket_name = 'bl-bucket'

 #上傳到七牛後保存的文檔名
 arr = filename.split("/")
 
 key = arr[len(arr)-1]
 # 設置圖片縮略參數
 fops = 'imageView2/0/q/75|watermark/2/text/5YWs5LyX5Y-377yaYW9ob-axgue0og==/font/5b6u6L2v6ZuF6buR/fontsize/400/fill/IzAwMDAwMA==/dissolve/50/gravity/SouthEast/dx/10/dy/10'

 # 通過添加'|saveas'參數,指定處理後的文檔保存的bucket和key,不指定默認保存在當前空間,bucket_saved為目標bucket,key_saved為目標key
 encode_str = bucket_name + ":" + key

 saveas_key = urlsafe_base64_encode(encode_str)

 fops = fops+'|saveas/'+saveas_key

 access_key = 'xxx'
 secret_key = 'xxx'

 #構建鑑權對象
 q = Auth(access_key, secret_key)

 #生成上傳 Token,可以指定過期時間等
 # 在上傳策略中指定fobs和pipeline
 policy={
   'persistentOps':fops
  }

 token = q.upload_token(bucket_name, key, 3600, policy)

 #要上傳文檔的本地路徑
 localfile = filename

 ret, info = put_file(token, key, localfile)
 print("http://image.blueskykong.com/" + key)
 assert ret['key'] == key
 assert ret['hash'] == etag(localfile)
 pass

# 直接上傳函數
def upload_pic(filename):
 ....#較為簡單,此處省略

# 獲取變化的文檔名
def get_upload_name(fname):
  with open(fname, 'r') as f:  #打開文檔
    lines = f.readlines() #讀取所有行
    first_line = lines[0] #取第一行
    last_line = lines[-1] #取最後一行
    return last_line

fname='nohup.out'
if __name__ == '__main__':
  l = get_upload_name(fname)
  l=l.replace("\n", "")
# print (l)
  watermark_add(l)
# print (upload_pic(l))

如上的腳本即可,讀者需要自行設置access_key、secret_key、fname(fswatch輸出的文檔名)、bucket_name。祕鑰在個人中心可以找到:

測試

啟動fswatch監聽/Users/user/Documents/pic/,並輸出記錄到nohup.out文檔中。

nohup fswatch /Users/user/Documents/pic/ &

fswatch會在後台進程持續監聽。筆者還寫了個bash命令,腳本可以寫得很簡單,如下:

#! /bin/bash
echo "uploading pic..."
echo "url is : "
python upload.py
exit 0

每次上傳圖片後,執行該命令直接得到到如下的輸出:

uploading pic...
url is :
http://image.blueskykong.com/secret-qiniu.jpg

這是在本地截圖保存之後,執行腳本的輸出內容。 http://image.blueskykong.com/secret-qiniu.jpg 即為我們上傳圖片的外鏈地址。

關鍵詞:MacOS 七牛

相關推薦:

Python實現七牛雲視頻播放

python django 上傳文檔到七牛

上手七牛雲存儲

node 七牛雲上傳文檔

Ueditor結合七牛雲存儲上傳圖片、附件和圖片在線管理的實現和最新更新

7NiuYun雲存儲UploadPicture

.Net Core實現將文檔上傳到七牛雲存儲

七牛 js 上傳 解決沒有文檔名

kindeditor 加入七牛雲上傳

Python(二)藉助七牛雲通過腳本自動獲取上傳圖片外鏈