笔者常常用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