打造一个上传图片到图床利器的插件(Mac版 开源)
写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)(2017-05-31 20:23)
打造一个上传图片到图床利器的插件
鉴于写博客截图手动上传到图床的步骤过于繁琐,很久之前写了一个windows版的截图软件插件,用于把图片快速上传到图床
重新打包用户量过亿的开源截图软件——加入图片自动上传到图床的功能
现在换系统了,由windows换成了Mac,系统确实好用,但截图上传到图床的功能没法子弄过来,网上搜了下现成的软件,都不太好用。Mac免费软件不像windows那么多。在windows系统上是在Greenshot的基础上实现的七牛图床插件,这个软件在Mac下也有,但是不开源。所以还是自己动手吧,实现一个mac版的上传到七牛图床的软件插件。好了,先上最终效果图:
选择一款mac版开源截图软件
选择的截图软件需要满足两个条件:
- 一个是易用性,界面友好
- 另外一个是这个软件要支持插件
google了一下,搜了几个,最后觉的katana这个软件还不错。
虽然功能简单了点,但界面做的比较专业,而且支持service,上面的imgur是一个国外的免费的图床服务。好了,就在这上面整吧。
研究打包
这个软件是用Javascript写的,才知道用javascrpit还能做出Mac的app,开发工具选择使用WebStorm。研究源码的时候一般是边操作软件,边看代码,大概把整个软件轮廓和相关的细节了解了一下。
接下来比较棘手的其实是如何把源码打包成mac app,把github上打包好的软件下载下来研究了一番。看一下它的目录结构,看到了Framework这个文件夹,进到里面看一下:
drwxr-xr-x 6 zexu staff 192B 6 24 16:48 Electron Framework.framework
drwxr-xr-x 3 zexu staff 96B 6 24 16:48 Katana Helper EH.app
drwxr-xr-x 3 zexu staff 96B 6 24 16:48 Katana Helper NP.app
drwxr-xr-x 3 zexu staff 96B 6 24 16:48 Katana Helper.app
drwxr-xr-x 7 zexu staff 224B 6 24 16:48 Mantle.framework
drwxr-xr-x 7 zexu staff 224B 6 24 16:48 ReactiveCocoa.framework
drwxr-xr-x 7 zexu staff 224B 6 24 16:48 Squirrel.framework
看到了Electron这个东西,接着google,下面是官网的介绍:
使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用
看到package.json下面有下面几个依赖包:
"devDependencies": {
"electron": "^2.0.3",
"electron-packager": "^12.0.2",
"standard": "^11.0.1"
}
应该就是它了,用的是electron框架打包的app。
安装依赖
npm install
把所有依赖包安装到本地,然后cd到项目根目录执行下面的命令:
zexudeMacBook-Pro:katana zexu$ electron-packager . --overwrite --platform=darwin --arch=x64 --icon=./app/static/images/icon.icns --prune=true --out=release-builds
- 注意,我把electron-packager 进行全局安装了。
就一条命令,打包就成了,竟然如此简洁。
研究源码和功能实现
先把qiniu的npm包装上:
npm install qiniu --save
为这个软件写插件需要写css,html和一写js的功能函数。一个软件的功能很多,但要快速聚焦到相关的功能点,有时候光看代码的效率实在是低。把代码跑起来,看一些log输出是不错的快速熟悉代码的方法。
如何才能debug呢。看下图,按照红色字体添加一个新的Debug Configurations:
网上说解释器的路径要写成下面这样:
~/github/katana/node_modules/.bin/electron
试了一下webstorm中这个路径是打不开的,但发现这个文件是一个软链,指向的是上图中的解释器路径,所以直接写成图片上的路径。网上的帖子说设置好之后是可以加断点调试的。试了几次没有成功,软件会闪退,应该和这个软件的多进程相关。log到是能看了,但有些Log不能打印到控制台上,还是多进程的问题,最后找到了解决方法,使用下面的变量来打印log:
const con = require('electron').remote.getGlobal('console')
软件的整个工作流程是下面这样的:
- 把AK,SK,Scope和Default Domain配置好,不熟悉这几个参数的参考windows版的软件配置。
save之后这些参数被持久化到文件中。
截图的时候,先调用Mac的截图接口,生成截图文件保存到如下路径中:
~/.katana/uploads
最后调用qiniu的接口把文件上传到七牛图床。
markdown格式的图片链接会拷贝到剪贴板中,commond+v将其复制到编辑器中。
具体代码细节就不介绍了,感兴趣自己去github看吧。qiniu的官方文档感觉比较乱。研究了一些时间,把这段代码贴一下:
const ak = _qiniuService.accessKey
const sk = _qiniuService.secretKey
const sc = _qiniuService.Scope
const dm = _qiniuService.defaultDomain
var key = path.basename(file)
var mdpath = '![](' + path.join(dm, key) + ')'
const link = {link: mdpath}
var mac = new qiniu.auth.digest.Mac(ak, sk)
var options = {
scope: sc + ':' + key,
expires: 0
}
var putPolicy = new qiniu.rs.PutPolicy(options)
var uploadToken = putPolicy.uploadToken(mac)
var config = new qiniu.conf.Config()
config.zone = qiniu.zone.Zone_z1
var formUploader = new qiniu.form_up.FormUploader(config)
var putExtra = new qiniu.form_up.PutExtra()
formUploader.putFile(uploadToken, key, file, putExtra, function ( respErr, respBody, respInfo) {
console.log('status:' + respInfo.statusCode)
if (respErr) {
callback(null, respErr)
throw respErr
}
if (respInfo.statusCode === 200) {
callback(link)
console.log(respBody)
} else {
console.log(respInfo.statusCode)
console.log(respBody)
//callback(link)
}
})
- 注意:上面的代码中, zone是写死的,所以这个插件目前只支持华北的服务器。若支持其它地区的服务器,修改下面的语句:
config.zone = qiniu.zone.Zone_z1
各个地区以及对应的zone变量值如下:
- 华东 qiniu.zone.Zone_z0
- 华北 qiniu.zone.Zone_z1
- 华南 qiniu.zone.Zone_z2
- 北美 qiniu.zone.Zone_na0
Download
给一个打包好的链接,感兴趣的可以玩一下:
链接:https://pan.baidu.com/s/1JEej70eO5FCqF6CibOmdLQ 密码:qnq7
源码链接,在dev分支上开发的:
https://github.com/harlanc/katana
打造一个上传图片到图床利器的插件(Mac版 开源)的更多相关文章
- 工具 | Typora + PicGo-Core 自动上传图片到图床
0 前言 Markdown 是现在十分流行的标记式语言,在博客等很多场景中应用十分广泛.众所周知,Markdown 中的图片是以链接的形式存在的,不像 Word 等传统文本编辑器直接把图片嵌入文档中. ...
- 关于使用阿里OSS服务搭建图床和使用PicGO上传图片到图床
最近喜欢上了使用markdown来写博客,可是markdown的图片却是本地的,如果我要发博客,那么又要重复截图了.于是干脆弄了个图床,本地截图的时候上传到图床,markdown中的代码结果也是图床里 ...
- Typora + PicGo-Core + Custom Command 实现上传图片到图床
教程参考 Typora+PicGo-Core(command line)+Gitee实现图片上传到图床 主要借鉴 picgo 操作命令 Typora + PicGo + Gitee 实现图片自动上传到 ...
- JVectorMap地图插件.Net版开源
jVectorMap地图插件只要浏览器技术JavaScript.CSS,HTML,SVG或VML就可以浏览使用,不需要Flash或其他专有的浏览 器插件.所以jVectorMap在所有现代移动浏览器上 ...
- 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)
打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...
- Typora+PicGo-Core(command line)+SMMS、github、gitee实现Typora图片上传到图床
Typora+PicGo-Core(command line)+SMMS.github.gitee实现Typora图片上传到图床 1 安装插件2 配置config.json 2.1 设置SMMS ...
- 写markdown博客如何截图并快速上传到图床——记一个工具插件的实现
1. 背景 写博客有一个自己的图床是不错的选择,如果不借助工具,在markdown博客中添加图片的步骤如下: 截取图片,保存到本地(得来回点对话框,选择保存路径,选择文件类型,输入文件名). 上传到图 ...
- 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!
前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...
- [置顶] 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!
前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...
随机推荐
- Javascript的作用域和闭包(一)
一.作用域是什么? 几乎所有的编程语言最基本的功能之一,就是能够存储变量的值,并且能访问和修改这些值. 修改变量值的过程我们通常在程序执行时,称为改变一个对象的状态.有了状态,让程序变得有非常有趣. ...
- AJAX工作原理与缺点
1.概念:什么是AJAXAJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.2.为什么要使用他 ...
- 前端面试题整理—HTML/CSS篇
1.简述一下你对HTML语义化的理解 1)用正确的标签做正确的事情 2)html语义化让页面的内容结构化,结构更清晰,便于对浏览器.搜索引擎解析 3)即使在没有样式CSS情况下也以一种文档格式显示,并 ...
- 060、在docker中使用flannel(2019-03-29 周五)
参考https://www.cnblogs.com/CloudMan6/p/7441188.html 配置docker 连接flannel 编辑host1的docker配置文件/etc/sys ...
- 1.2 认识python(了解)
一.Python发展背景 Python的作者,Guido von Rossum(吉多·范·罗苏姆,中国Python程序员都叫他 龟叔),荷兰人.1982年,龟叔从阿姆斯特丹大学获得了数学和计算机硕士学 ...
- PS与AI快捷键小结
[文档整理系列] PS与AI快捷键小结PS快捷键 填充前景色 alt+del填充背景色 crel+del前景色与背景色互换: x[英文状态] 切换打开的文件:ctrl + tab关闭当前文件: ctr ...
- [C++]Linux之虚拟文件系统[/proc]中关于CPU/内存/网络/内核等的一些概要性说明
声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神.也欢迎大家一起探讨,交流,以共同进步- 0.0 1.Linux虚拟文件系统 首先要明白 ...
- ubuntu 18.04//18.10&&windows 7/10双系统系统时间不一致
新版本的Ubuntu使用systemd启动之后,时间也改成了由timedatectl来管理,因此网上的许多方法就不适用了. 经过测试发现下面的方法可以解决双系统时间不一致问题: 1.将硬件时间UTC改 ...
- Linux基础学习【规则与安装】
一.主分区.扩展分区与逻辑分区的特性: 主分区与扩展分区最多可以有4个(硬盘的限制) 扩展分区最多只能有1个 逻辑分区是由扩展分区持续切割出来的分区 能够被格式化后作为数据访问的分区为主分区和逻辑分区 ...
- Python的集合和元组
一.元组 元组也是一个list,但它的值不能改变 Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号 ...