我的图床解决方案

选择图床

日常写东西已经离不开markdown语言。在markdown文本中,每一个图片实际是个链接,指向存放图片的地方——也就是「图床」。

图床有多种,免费的、收费的、适合开发者的、适合非技术人员的、自建的、公共的……网上搜索会找到一大批。

一直以来,最值得信赖的是「七牛云」,云存储技术扎实,免费10G存储空间绝对够用,存储资源管理功能完善,最适合作为个人图床使用。直到今年,七牛云要求用户须要有备案域名才可正常使用,无奈只好弃用。

接下来去哪里寻找云存储呢?实际上大部分提供网络内容服务的产品都是一个存储平台,例如微博、微信公众号、简书,将图片上传上去,通过链接能够公开访问,这就是图床了。我要找的是最稳定可靠的服务,不会突然关闭、突然有资质要求,那github是最佳选择。

图片工作流

使用github作为图床,具体如何使用?

  1. 建立一个github公开仓库
  2. 将图片保存到本地仓库目录
  3. 提交到github仓库

这完全可以使用脚本完成,一个命令代替多步操作。

但脚本可以完成更多事情,何不想一想把所有事情自动化完成?

我期望的效果:截图-调整图片大小-保存-上传-得到图片链接地址-转成markdown地址,一气呵成。

神奇Alfred可以实现所有这些步骤,并且串联起来。

实现方法

Alfred新建workflowy

Alfred-img

imageMagick

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
#定义常量
git_repo="git@github.com:zhongweili/images.git"
git_path=/Users/$(whoami)/sub
repo_name="images"
github_prefix="https://raw.githubusercontent.com/zhongweili/images/master"
cur_date=$(date +"%Y%m%d")
folder=/Users/$(whoami)/Desktop/
#{query}是alfred workflowy的参数
filename=`echo "{query}" | tr 'A-Z' 'a-z' | tr -s ' ' | tr ' ' '_'`_`date +%s`.png
path=$folder$filename
#截屏
screencapture -i $path
while [ ! -f $path ]
do
sleep 1
done
width=`/usr/bin/osascript << EOT
tell application "System Events"
activate
set theWidth to (display dialog "Enter the width" default answer "650")
end tell
set theWidth to the text returned of theWidth as integer
return theWidth
EOT`
while [ -z "$width" ]
do
sleep 1
done
#使用imageMagick的convert方法
convert $path -resize "`echo $width`x>" $path
if [ ! -d "$git_path/$repo_name/.git" ]
then
cd $git_path
git clone --quiet $git_repo
fi
cd "$git_path/$repo_name" && \
ls | grep -v $cur_date | xargs rm -rf &&\
if [ -f "$git_path/$repo_name/$cur_date/$filename" ]
then
echo "$github_prefix/$cur_date/$filename"
exit 0
fi
#按日期建立文件夹
mkdir -p $git_path/$repo_name/$cur_date
cp $path $git_path/$repo_name/$cur_date
cd $git_path/$repo_name && \
git add "$cur_date" > /dev/null &&\
git commit -m "$cur_date $filename" >/dev/null &&\
git push --quiet origin master &&\
#输出结果到剪切板
result="$github_prefix/$cur_date/$filename"
echo \![{query}]\($result\) | pbcopy
#删除桌面文件
rm $path