筆者常常用markdown寫一些東西,圖片是文章中必不可少的。通常狀況下,都是先是將畫好的圖保存到本地的某個地方,而後手動將圖片上傳到OSS(如七牛雲),最後拷貝外鏈地址加到文章中。 另外一種場景是加水印。原創不易,有時候會發生第一天晚上寫好的博客文章,次日就出如今某公衆號號,而且申請了原創保護。這個時候若是圖片上有個特殊水印,原封不動地拷貝文章就有出處可尋。雖然不能徹底解決這種侵權的行爲,可是也提升了抄襲者的成本。python
至於具體實現,我當時考慮了幾個問題:linux
涉及到的工具:git
筆者整理了使用的七牛雲的存儲SDK,主要是上傳&預轉持續化
,將圖片加水印上傳到對應的bucket中。這僅是一個小工具,目前已經能知足筆者的需求。github
Linux下面可使用inotify-tools來進行文件夾、文件變動的檢測。bash
fswatch是一個使用Mac OS X FSEvents API的同步工具,同時也可使用在BSD 與Debian操做系統。微信
使用Homebrew進行安裝:markdown
brew install fswatch
複製代碼
監控/User/usr/Downloads文件夾:函數
fswatch /User/usr/Downloads
複製代碼
當/User/usr/Downloads文件內容變化時,輸出變更的文件列表。如:工具
/Users/user/Downloads/PlatformTransactionManager.jpg
複製代碼
固然fswatch還有其餘用法,這裏不展開。測試
首先須要註冊七牛雲的帳號,點擊註冊通道註冊(筆者這裏不是專門打廣告,沒有收取任何廣告費。。)。
其次,建立一個bucket。以下圖,筆者命名爲bl-bucket
。
在上圖中,還能夠看出筆者綁定了域名http://image.blueskykong.com
,這個能夠自行選擇,若是不綁定,可使用測試域名。綁定域名以後,記得將該域名設爲外鏈默認域名。
這裏之因此這樣作,是爲了後面腳本返回最後的外鏈地址(我定義的規則爲:拼接外鏈默認域名 + 文件名)。
而後,設置水印樣式,筆者在圖片的右下角添加了文字水印公衆號:aoho求索
。固然還能夠對圖片進行其餘樣式設置,如縮放圖片,設置長寬等,讀者根據須要自定。設置好以後,以下圖所示:
咱們須要的實際上是,最後生成的處理接口,這會用在咱們的上傳腳本中。
上面的步驟中,咱們先是記錄了特定文件的新增圖片名記錄,其次是設定好咱們的bucket、外鏈域名以及水印樣式。下面咱們進行編碼。
啓動fswatch後,輸出變更文件記錄到指定的文件,以後主要分爲三步:
上傳&預轉持續化
。# -*- 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
即爲咱們上傳圖片的外鏈地址。
一個小工具的分享,適合在mac下用markdown寫做的小夥伴,減輕一些繁瑣的操做。目前來講,能知足筆者的需求,也沒啥高端的地方。若是你們有改進或者更好的工具,記得留言分享。固然,若是有不清楚的地方,能夠參考git項目https://github.com/keets2012/Sync-Pic.git。
七牛雲註冊地址: https://portal.qiniu.com/signup?code=3lffq8tzqxc9e