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

爲何會有這樣的需求?

筆者常常用markdown寫一些東西,圖片是文章中必不可少的。通常狀況下,都是先是將畫好的圖保存到本地的某個地方,而後手動將圖片上傳到OSS(如七牛雲),最後拷貝外鏈地址加到文章中。 另外一種場景是加水印。原創不易,有時候會發生第一天晚上寫好的博客文章,次日就出如今某公衆號號,而且申請了原創保護。這個時候若是圖片上有個特殊水印,原封不動地拷貝文章就有出處可尋。雖然不能徹底解決這種侵權的行爲,可是也提升了抄襲者的成本。python

具體實現

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

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

涉及到的工具:git

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

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

文件監控工具:fswatch

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以及樣式

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

其次,建立一個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即爲咱們上傳圖片的外鏈地址。

總結

一個小工具的分享,適合在mac下用markdown寫做的小夥伴,減輕一些繁瑣的操做。目前來講,能知足筆者的需求,也沒啥高端的地方。若是你們有改進或者更好的工具,記得留言分享。固然,若是有不清楚的地方,能夠參考git項目https://github.com/keets2012/Sync-Pic.git。

七牛雲註冊地址: https://portal.qiniu.com/signup?code=3lffq8tzqxc9e

訂閱最新文章,歡迎關注個人公衆號

微信公衆號

參考

OS X使用fswatch+rsync自動檢測文件夾改動並同步

相關文章
相關標籤/搜索