打造一个上传图片到图床利器的插件(Mac版 开源)

简介: 打造一个上传图片到图床利器的插件鉴于写博客截图手动上传到图床的步骤过于繁琐,很久之前写了一个windows版的截图软件插件,用于把图片快速上传到图床重新打包用户量过亿的开源截图软件——加入图片自动上传到图床的功能现在换系统了,由windows换成了Mac,系统确实好用,但截图上传到图床的功能没法子弄过来,网上搜了下现成的软件,都不太好用。

打造一个上传图片到图床利器的插件

鉴于写博客截图手动上传到图床的步骤过于繁琐,很久之前写了一个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


作者: HarlanC

博客地址: http://www.cnblogs.com/harlanc/
个人博客: http://www.harlancn.me/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!

目录
相关文章
|
7月前
|
编解码 项目管理 开发工具
探寻最受欢迎的 Mac 系统开源免费软件
探寻最受欢迎的 Mac 系统开源免费软件
235 1
Mac安装tree插件
Mac安装tree插件
98 0
|
Web App开发 开发者
Mac Chrome crx(插件) 文件导出与导入
Mac Chrome crx(插件) 文件导出与导入
398 0
最新MAC 中文版 Final Cut Pro X V10.6.5 专属视频剪辑后期工具及其插件安装使用教程
Final Cut Pro X又名FCPX,是MAC上非常不错的视频非线性剪辑软件,它剪辑速度超凡,具有先进的调色功能、HDR 视频支持,以及 ProRes RAW,让剪辑、音轨、图形特效、整片输出,支持主流的摄像机格式,是专业视频剪辑领域的王者工具。同时也给大伙安排了两款不错的插件Motion,Compressor。
最新MAC 中文版 Final Cut Pro X V10.6.5 专属视频剪辑后期工具及其插件安装使用教程
|
4月前
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
253 1
|
3月前
|
算法 测试技术 AI芯片
CPU反超NPU,llama.cpp生成速度翻5倍!LLM端侧部署新范式T-MAC开源
【9月更文挑战第7天】微软研究院提出了一种名为T-MAC的创新方法,旨在解决大型语言模型在资源受限的边缘设备上高效部署的问题。T-MAC通过查表法在CPU上实现低比特LLM的高效推理,支持混合精度矩阵乘法,无需解量化。其通过位级查表实现统一且可扩展的解决方案,优化数据布局和重用率,显著提升了单线程和多线程下的mpGEMV及mpGEMM性能,并在端到端推理吞吐量和能效方面表现出色。然而,表量化和快速聚合技术可能引入近似和数值误差,影响模型准确性。论文详见:[链接](https://www.arxiv.org/pdf/2407.00088)。
166 10
|
4月前
|
JavaScript Linux iOS开发
【Mac系统】Vscode使用LeetCode插件报错‘leetcode.toggleLeetCodeCn‘ not found
在Mac系统下使用VSCode的LeetCode插件时遇到“leetcode.toggleleetcodecn”命令找不到的错误解决方法,主要是通过从Nodejs官网下载并安装最新版本的Node.js来解决环境配置问题。
241 0
|
7月前
|
机器学习/深度学习 人工智能 PyTorch
AI日报:苹果为使用Mac的人工智能开发者推出开源工具
AI日报:苹果为使用Mac的人工智能开发者推出开源工具
|
Web App开发 机器学习/深度学习 物联网
ChatGPT平替「小羊驼」Mac可跑!2行代码单GPU,UC伯克利再发70亿参数开源模型
ChatGPT平替「小羊驼」Mac可跑!2行代码单GPU,UC伯克利再发70亿参数开源模型
384 0