1. 背景

写博客有一个自己的图床是不错的选择,如果不借助工具,在markdown博客中添加图片的步骤如下:

  • 截取图片,保存到本地(得来回点对话框,选择保存路径,选择文件类型,输入文件名)。
  • 上传到图床服务器(打开网页,跳转到上传页面,点击browse,选择本地文件,upload...)
  • 获取图片链接(为了确保无误,可以在浏览器中打开图片,并复制link)
  • 将链接添加到markdown博客中(Ctrl+v 复制到博客中)

还是很繁琐的,那么可不可以自己实现一个工具来做这些繁琐的事情呢?

2. 分析

首先要确定使用哪家的图床服务,网上搜了一下,都说七牛云比较靠谱(这里不是打广告。。),提供的SDK也比较全,我们这里就用七牛云,接下来确定该如何实现一个截图工具来实现截图+图片upload功能,从头实现一个工具不太现实,找一个开源的截图工具比较靠谱,博主目前正在用的是greenshot,发现这正好是一个开源的工具,好了,就是它了。

3. 需求

为greenshot添加一个插件,初步实现以下功能:

  • 针对七牛云SDK接口,添加配置对话框,可以配置accesskey,secretkey,scope,default domain来支持上传,并能将这些配置保存到本地(为了简单,将access key和secret key保存成明文)
  • 可以为图片名字添加前缀
  • 支持选择文件类型,支持bmp,gif,png,jpg等格式
  • 上传文件后可以自动将图床中的文件link复制到剪贴板

4. 准备

开发工具 visual Studio 2017
原材料 七牛云SDK源码+greenshot源码
其它 申请一个七牛云账号,开通图床服务(可以百度或者google...)

5. 实现

过程省略,实现比较简单,大部分实现花在熟悉greenshot代码架构和代码调试上,直接上源码:
https://github.com/harlanc/greenshot

6. Demo

6.1 安装

  • 首先安装GreenShot:
    http://getgreenshot.org/

  • 如果不想重新编译源码,直接到下面的网盘链接下载插件:

链接: https://pan.baidu.com/s/1b5LQHo 密码: 33z8

压缩包中包含三个文件,一个gsp插件,两个xml语言文件,拷贝到对应的目录下:

6.2 配置

打开GreenShot,首先我们验证一下插件是否加载成功,邮件单击GreenShot图标,单击Preference...

如果看到插件列在了Plugins中,说明加在成功:

打开配置主界面:

序号1到4必须填正确,这些都该填写什么呢?

见下图,登陆七牛云,点击个人中心->密钥管理,即可看到AK和SK:

序号3对应着存储空间名称,你可以新建存储空间,把对应的名字填写到Scope里:

序号4对应着域名,这个域名是用于拼写复制到剪贴板的图片link的,不知道有没有更好的方法。目前楼主用的是测试域名:

序号5是图片格式,序号6为图片名字前缀,方便管理图片。
好了,配置好之后,点击OK,这些配置信息都会保存到本地的配置文件中,注意AK和SK在这里是明文保存,小心不要泄露。。

6.3 使用

看一下如何使用,右键单击GreenShot图标,点击Capture region,或者其他的截图方式:

如果去边编辑图片,你可以选择Open in image editor,如果你想直接上传,单击Upload to Qiniu即可。

编辑完图片之后,单击七牛图标。

最后一步,Ctrl+V ,将剪贴板中的图片链接拷贝到你的博客中,大功告成!

写markdown博客如何截图并快速上传到图床——记一个工具插件的实现的更多相关文章

  1. 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)

    打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...

  2. 基于SpringBoot从零构建博客网站 - 设计可扩展上传模块和开发修改头像密码功能

    上传模块在web开发中是很常见的功能也是很重要的功能,在web应用中需要上传的可以是图片.pdf.压缩包等其它类型的文件,同时对于图片可能需要回显,对于其它文件要能够支持下载等.在守望博客系统中对于上 ...

  3. hexo博客部署到github无法上传的问题

    博客生成之后,按照网上别人的教程,讲项目部署到github上,修改_config.yaml中的deploy部分如下所示: deploy: type: git repository: https://g ...

  4. 【技术博客】Laravel5.1文件上传单元测试

    Laravel5.1文件上传单元测试 作者:ZGJ 在软工第三阶段中,我彻底解决了上一阶段一直困扰我的文件上传单元测试问题,在这里做一个总结. 注:下文介绍中,方法一方法二实现简单但有一定的限制条件( ...

  5. Django 博客项目02 Form验证+ 上传头像(预览)+Ajax用户注册

    头像预览 $("#avatar_file").change(function(){ // 获取上传的文件对象 var file=$(this)[0].files[0]; // 读取 ...

  6. 写Markdown博客时遇到的一些问题

    成对的美元符号$,无法转义 相同的文本,就因为成对的$(美元符号),上面显示成了公式(Math)-而且还无法转义!下面用单行代码(``)-键盘"1"左侧的键,显示就正常了 下图方法 ...

  7. 万里长征第二步——django个人博客(第七步 ——上传文件)

    在项目目录下新建一个 ‘uploads’文件夹以保存上传的文件 配置setting.py文件 MEDIA_URL = '/uploads/' MEDIA_ROOT = os.path.join(BAS ...

  8. 前端react+redux+koa写的博客推荐

    React-Node搭建的博客 曾经用的php+mysql+js写的博客,现在看来已经很low了,所以用目前最火的react+koa框架重构一下.先上地址吧:目前线上版本http://www.liuw ...

  9. Dropplets – 极简的 Markdown 博客平台

    Dropplets 是一个简单的博客平台,专注于提供正是你在博客解决方案中需要的.当涉及到基础的博客功能,你真正想要做的是写和发表,而这就是 Dropplets 的过人之处.Dropplets 是一个 ...

随机推荐

  1. Activity栈与任务管理探究1——栈与任务的概述

    Activity栈与任务管理探究1--栈与任务的概述 内容概览 1. 前言 2. Activity中的Stack 3. Activity中的Task 4. Activity栈与任务管理基本原则 1. ...

  2. C++ struct 初始化的问题

    struct student { int age; string name; int id; }; 初始化: student st1={10, "li ming", 01}; 修改 ...

  3. 【2017-04-20】Sql字符串注入式攻击与防御

    一.攻击 所谓sql字符串注入式攻击就是在用户输入界面输入一串sql语句,来改变C#中连接数据库要执行的sql语句 通过你写的程序,直接来执行我想要执行的sql语句 例如:在这么一个程序中,sname ...

  4. 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)

    本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...

  5. split()方法

    split()方法用于把一个字符串分隔成字符串数组. 它有两个参数: separator:从参数指定的地方分隔字符串,必需: howmany:该参数可指定返回的数组的最大长度.如果设置了该参数,返回的 ...

  6. [Day01] Python基础

    明天要完成的任务如下:  Python 四则运算 Python 数据结构 Python 元算符(in.not in.is.and.or) 用户输入 (input.raw_input) 流程控制 缩进 ...

  7. 纯HTML课表

    table标签构造课表 table标签常用于制作表格以及简单布局,于是我就玩了下table标签,用table标签也能构造出很漂亮的页面呢,虽然在博客页面加入与实际打开页面稍微有点出入,但还是可以接受的 ...

  8. Windows上Ruby开发环境的配置

    最近公司项目上有需要,需要开发一个puppet的自动化工具,这个工具需要操作存储设备上的各种资源,而鉴于puppet不是善于完成这个任务的首选语言,于是我们选择了puppet的“爹”,Ruby. 熟悉 ...

  9. Python 与 C/C++ 交互的几种方式

    python作为一门脚本语言,其好处是语法简单,很多东西都已经封装好了,直接拿过来用就行,所以实现同样一个功能,用Python写要比用C/C++代码量会少得多.但是优点也必然也伴随着缺点(这是肯定的, ...

  10. Linux 定时任务详解

    原文地址:http://edu.codepub.com/2011/0104/28518.php   crond分为系统级定时和用户级定时,系统级定时主要编辑/etc/crontab,用户级定时主要利用 ...