博客图床

本文最后更新于:2019年1月8日 下午

原来我的博客使用七牛作为图床,速度挺快但是无法免费使用 https,就想着更换一个图床(其实就是不折腾就难受)。
更换图床有两处较为麻烦:

  1. markdown 文档图片链接批量替换,并且有时没有规律可循。
  2. 大量图片上传到新的图床并且获得图片链接地址。

基于以上的考虑我对博客做了如下调整。

图片链接处理

hexo 有个 hexo-asset-image 插件可以自动补全图片全路径,我们只需稍微修改下就可以将图片链接地址查找抛给程序处理,而不用一个个手动替换。
我分别对云存储库和其他图库做了区别,说明如下具体代码修改参见 github

云存储

七牛上传时路径可以指定,地址头是固定的,所以上传成功后也就知道图片的外链地址是什么了。
比如:

  1. 你建立一个存储空间,七牛分给你的测试域名是 xxx.bkt.clouddn.com
  2. 上传一个图片 test.jpg 到该存储空间,你设置的前缀是 myway/test/
  3. 那么该图片的外链地址就是 http://xxx.bkt.clouddn.com/myway/test/test.jpg

这种类型的图床只需要定义一套自己的上传路径规则就好了,外链地址完全可以自动生成。

相册

其他图床多半是相册类型的,你不能控制外链的格式和名字。
比如:

  1. 你上传一个 test.jpg 图片到新浪相册
  2. 查看外链你会发现是 https://wx4.sinaimg.cn/tesdf/bc323245hj23402c0b29.jpg,完全没有规律可言

这种情况你需要一个源文件名和地址对应表,我使用的是 json 文件。

1
2
3
{
"test.jpg": "https://wx4.sinaimg.cn/tesdf/bc323245hj23402c0b29.jpg"
}

当然这种需要你的所有源文件名不能重复。

图床选择

七牛

有免费 10G 的存储空间,而且可以自动处理图片加水印什么的。
网上有很多批量上传工具,我就不说了,这是我用的脚本代码 qiniu-upload.py
目前测试用的外链地址取消了,所以也没有办法做图床了。

本地

使用静态博客本身路径存储(要挂一起挂),一般博客(一年更不了几次)完全够用了。
但是图片要保存到 git 中,需要大文件管理,目前我用的 Git LFS
安装好后执行以下操作初始化:

git lfs install
git lfs track "*.png"
git lfs track "*.jpg"
git add .gitattributes

flickr

我选择这个主要是空间没有限制,api 也很丰富,唯一的缺点就是国内会被屏蔽吧。我一般放的是自己拍摄的照片,也都是自我欣赏所以这点对我没有影响。

准备

申请自己的 API Key
因为我使用的是 python,安装 flickrapi 库:pip install flickrapi
翻墙,这个很重要,我一开始怎么试都是失败就是因为没有翻墙。。。

获得权限

1
2
flickr = flickrapi.FlickrAPI(api_key, api_secret)
flickr.authenticate_via_browser(perms='write')

注意的是这种授权第一次会弹出一个网页界面,所以系统里面必须要有浏览器。
授权通过后你的用户下会产生一个 .flickr 文件夹里面存放着授权信息。

上传图片

1
2
3
rsp = flickr.upload(filename="xxx.jpg")
if rsp.attrib['stat'] == 'ok':
photo_id = rsp.find('photoid').text

详细说明,这样获得了上传后图片 ID。

获得外链地址

使用 flickr.photos.getSizes API 可以获得图片各种大小的外链地址。
开始不清楚 flickrapi 库怎么调用这个 API,后来发现好像是有规律的,photos.getSizes 就是 photos_getSizes

1
2
3
4
5
6
7
8
9
10
rsp = flickr.photos_getSizes(photo_id=photo_id)
sizes = rsp.find('sizes')
urls = {}
for size in sizes:
info = size.attrib
urls[info['label']] = info['source']

if 'Medium 800' in urls:
url = urls['Medium 800']
print(url)

返回数据处理可以查看 Response parser: ElementTree 文档。

保存

将图片文件名和地址保存为 json 文件。
全部代码参见 flickr-upload.py


博客图床
https://wishlily.github.io/article/tools/2018/05/15/figure-bed/
作者
Wishlily
发布于
2018年5月15日
许可协议